Menu
CoddyTech

親と子

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は同じです。

challenge icon

チャレンジ

中級

旗を、船から測ったマストの根元に配置しましょう。

  1. Start()では、数値 (0.6, 1, 0) は旗の親である Ship から測ったものです。
  2. その行の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プレイグラウンド