解決地圖過大時物體旋轉時抖動問題
在大地圖中物體旋轉抖動是因為物體距離世界原點過遠,因為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);
}