フローティング起点

概要

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 の値として、カメラのみを含む新しい配列を渡しています。これにより、カメラを新しい起点に移動できます。