質問: いつもお世話になっております。 今回お伺いしたいのは、座標についてです。 GameObjectを作った時にpositionを設定するのですが、0, 0, 0と設定しても場所が違います。 ワールド座標、スクリーン座標、ビューポート座標などがあることは調べてわかっていますが、どのような時にどの座標が使われるのかがわからず... 異なる2つのPrefabを作った時、X,Y,Z軸、全てを0に合わせても実際のPositionが異なり、場所が合いません。 ちなみのそれらのPrefabは、cubeをいくつか合わせてPrefabにしています。 どうすれば座標を合わせることができるのか、ご教授願えますでしょうか。 何卒よろしくお願いいたします。
回答: 親子関係によるズレの可能性があります。 まず、インスペクター上で指定するPositionはローカル座標です。 つまり「1つ上の親の位置=自分の原点」になります。 例えば、以下のような親子関係を持つオブジェクトの場合。(カッコ内はインスペクター上の座標) ・Parent (10,10,10) └Child (5,5,5) └Child2 (5,5,5) 実際に存在する位置(=ワールド座標)は以下ののようになります。 Parent (10,10,10) Child (15,15,15) Child2 (20,20,20) ←1つ上の親=Childが原点となるため この為、子のオブジェクトが原点からズレていると、親がワールド座標の(0,0,0)にあっても見た目上はズレているように見えます。 なお、スクリプトで設定する場合、 transform.position はワールド座標、 transform.localPosition はローカル座標となります。 また、スクリーン座標とビューポート座標は、「カメラに映っている画面」を元にした算出方法となりますので今回は無関係です。