UE4解决大地图问题(未完待续)
解决地图过大时物体旋转时抖动问题
在大地图中物体旋转抖动是因为物体距离世界原点过远,因为float精度不足造成角度计算误差,因此需要把世界原点设置到摄像机附近或者跟随移动。
http://api.unrealengine.com/CHN/Engine/LevelStreaming/WorldBrowser/index.html
世界原点变换
世界浏览器支持以某任意数据变换世界原点。移动世界原点会导致给世界中所有注册的actor添加偏移向量。每个actor具有一个ApplyWorldOffset函数, 您可以在子类中覆盖该函数来添加额外内容。如果您已经创建了一个继承AActor的新类并在其中存储了绝对位置值 ,那么要使它同世界原点改变正确地协同工作,您必须重写ApplyWorldOffset函数 并在其中移动您的绝对值。在游戏线程中,渲染和物理资源将会同actor并行变换。
巨大的世界和多玩家
在多玩家游戏中,目前还不支持世界原点变换。事实上,没有好的解决方案来处理这个 问题。目前我们仅发现两种方法来实现提供该支持:
-
实现您自己的服务器解决方案。我们大部分大型多人在线游戏的授权用户都这么做。
-
在客户端和虚幻专用服务器之间实现某种层,它将转换客户端的变动的绝对位置,并将它们传递到正确的专用服务器,该服务器仅存放了客户端所处的世界的部分。
FVector G = GetActorLocation();
UWorld* World = GetWorld();
if (FMath::Abs(G.X) > 50000 || FMath::Abs(G.Y) > 50000 || FMath::Abs(G.Z) > 50000)
{
World->SetNewWorldOrigin(FIntVector(G.X, G.Y, G.Z) + World->OriginLocation);
}