UE4解决大地图问题(未完待续)

解决地图过大时物体旋转时抖动问题

在大地图中物体旋转抖动是因为物体距离世界原点过远,因为float精度不足造成角度计算误差,因此需要把世界原点设置到摄像机附近或者跟随移动。

http://api.unrealengine.com/CHN/Engine/LevelStreaming/WorldBrowser/index.html

世界原点变换

世界浏览器支持以某任意数据变换世界原点。移动世界原点会导致给世界中所有注册的actor添加偏移向量。每个actor具有一个ApplyWorldOffset函数, 您可以在子类中覆盖该函数来添加额外内容。如果您已经创建了一个继承AActor的新类并在其中存储了绝对位置值 ,那么要使它同世界原点改变正确地协同工作,您必须重写ApplyWorldOffset函数 并在其中移动您的绝对值。在游戏线程中,渲染和物理资源将会同actor并行变换。

巨大的世界和多玩家

在多玩家游戏中,目前还不支持世界原点变换。事实上,没有好的解决方案来处理这个 问题。目前我们仅发现两种方法来实现提供该支持:

  1. 实现您自己的服务器解决方案。我们大部分大型多人在线游戏的授权用户都这么做。

  2. 在客户端和虚幻专用服务器之间实现某种层,它将转换客户端的变动的绝对位置,并将它们传递到正确的专用服务器,该服务器仅存放了客户端所处的世界的部分。

    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);
    }

posted @ 2018-04-04 20:28  C4ISR  阅读(2030)  评论(0编辑  收藏
C4ISR