親と子
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 31/85。
Hierarchyでは、あるオブジェクトを別のオブジェクトの上にドラッグすると、その子になり、親の下にインデントされて表示されます。子は親と一緒に移動、回転、拡大・縮小します。親を動かすと、子にコードがなくても、すべての子が一緒についてきます。
Unityは、子の位置を親からの相対位置として保存します。transform.localPositionは親から測ったオフセットで、transform.positionはワールド内の位置です。この騎手は馬の子で、スクリプトによって馬がどこにいても、馬の中心から1単位上、半単位後ろの位置に座ります。
void Start()
{
transform.localPosition = new Vector3(0, 1, -0.5f);
}馬が(4, 0.5, 2)にいるとき、騎手のpositionは(4, 1.5, 1.5)となり、localPositionは(0, 1, -0.5)のままです。馬が歩くと、positionは変わりますが、localPositionは変わりません。オフセットは親自身の軸に沿って測られるため、親が回転または拡大・縮小すると、オフセットもそれに合わせて回転または拡大・縮小します。親を持たないオブジェクトでは、localPositionとpositionは同じです。
チャレンジ
中級旗を、船から測ったマストの根元に配置しましょう。
Start()では、数値 (0.6, 1, 0) は旗の親である Ship から測ったものです。- その行の
transform.positionをtransform.localPositionに変更しましょう。
「プレイ」を押すと、旗は船上のマストの根元に配置されます。その後、「確認」を押しましょう。
自分で試してみよう
using UnityEngine;
public class Hoist : MonoBehaviour
{
public float climb = 1f;
void Start()
{
// マストの根元:Shipを基準に右へ0.6、上へ1
transform.position = new Vector3(0.6f, 1, 0);
}
void Update()
{
// 上矢印キーが押されている間、Shipからの高さが4になるまで上昇する
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド