概要
GameObject の位置を表す値は、単精度浮動小数点の形式で格納されます。値が小さい場合はうまく機能し、正確に表すことができますが、値が大きくなると、浮動小数点の丸め誤差によって精度が低下します。そのため、起点から遠く離れている GameObject は正確な位置にレンダリングされません(少しずれた位置に配置されます)。ゲームプレイが起点から離れるほどその影響が大きくなり、アニメーションでは最も顕著になります。たとえば、プレーヤーがシーンをスムーズに移動できなくなり、動きにジッターが生じます。
MoveFloatingOrigin
Maps SDK for Unity では、MoveFloatingOrigin
と呼ばれるメソッドを使ってこの問題に対処します。
このメソッドは、ゲーム世界での座標の中心を別の位置(現在のカメラ位置など)に移し、ゲーム世界、プレーヤー、カメラをシームレスに移動します。すべての位置値が調整されますが、世界に含まれるそれ以外の値はそのまま維持されます。
用途
MapsService101 サンプルシーンは、MoveFloatingOrigin
メソッドを使用して gameworld を再び中心に配置する方法を示します。このシーンは、Unity の [Assets] フォルダ内の、[GoogleMaps] > [Examples] > [02_Fundamentals] の [Project] ペインにあります。シーンには、「Floating Origin Example Script」と呼ばれる GameObject が含まれています。これには、「FloatingOriginUpdater.cs」という名前の C# ソースファイルを参照する「Floating Origin Updater (Script)」と呼ばれるスクリプト コンポーネントが含まれます。
このスクリプトは、カメラが指定した距離だけ起点から移動するのを待ってから、ゲーム世界の中心を移動します。次のコード スニペットは、MoveFloatingOrigin
メソッドを呼び出す方法を示しています。
mapsService.MoveFloatingOrigin(
Camera.main.transform.position,
new [] { Camera.main.gameObject });
floatingOrigin パラメータ
最初のパラメータは floatingOrigin
と呼ばれます。これは、ゲーム世界の新しい中心位置を表す
Vector3 です。たとえば、位置値(100, 0, 100)を渡した場合、この位置が新しい起点(0, 0, 0)となり、地図対象物であるすべての GameObject が該当する距離だけ移動されます。
上記のコード スニペットでは、floatingOrigin
の値として現在のカメラ位置を渡しています。これにより、起点が現在のカメラ位置に移動し、それに応じてゲーム世界の中心も移動されます。
gameObjects パラメータ
2 番目の gameObjects
パラメータは省略可能です。これは、フローティング起点と同時に移動する GameObject の配列です。
Maps SDK for Unity では、作成したすべての GameObject(建物や道路などの地理的対象物)が自動的に移動されますが、このパラメータを使用すると、その他の GameObject を指定できます。たとえば、プレーヤーやプレーヤー以外のキャラクター(モンスター、宝物など)の指定が可能です。
上記のコード スニペットでは、gameObjects
の値として、カメラのみを含む新しい配列を渡しています。これにより、カメラを新しい起点に移動できます。