【Unity/C#】transform.SetParent(親子付け)の基本と書き方

Unityコード専用検索

コードの型

あるオブジェクトを、別のオブジェクトの子階層に移動させます。

C#

// 自分自身を、指定したオブジェクト(parentObject)の子にする
transform.SetParent(parentObject.transform);

コードの仕組み

Unityのヒエラルキー(Hierarchy)ウィンドウにある「ドラッグ&ドロップで階層を作る」作業を、プログラムから行うものです。

  • 親になる側: 基準となるオブジェクト。
  • 子になる側: 親の動きに連動するオブジェクト。
  • メリット: 子は親の「位置」「回転」「拡大」に引きずられて動きます。親を移動させれば、子も一緒に移動します。

活用例

例えば、「キャラクターがアイテムを拾って手に持つ」という処理によく使われます。

C#

public GameObject hand; // 手のオブジェクト
public GameObject item; // 拾いたいアイテム

public void PickUpItem()
{
    // アイテムを「手」の階層の下に入れる
    item.transform.SetParent(hand.transform);
    
    // 手の位置にぴったり合わせる
    item.transform.localPosition = Vector3.zero;
}

その他(実用的なテクニック)

  • localPositionとの併用: SetParent した直後は、親の座標の影響を受けて変な場所に飛んでいくことがあります。その時は localPosition = Vector3.zero を指定すると、親の中心にピタッと重なります。
  • worldPositionStays: 第2引数で「親子になったとき、今のワールド座標を維持するか(falseなら親に合わせる)」を指定できます。C#// 現在の場所を維持したまま、親だけ変更する(基本はtrue) transform.SetParent(parentObject.transform, true);
  • 親子関係の解除: 親子関係を解消して「世界に放り出す」ときは、親に null を指定します。C#transform.SetParent(null);

初心者向けまとめ

transform.SetParent は、「親という船に乗せる」ような命令です。

  • 親が動けば、子も一緒に動く(船が動けば乗客も動く)。
  • 親が消えれば、子も一緒に消える(船が沈めば…)。

これを使うと、装備品、背負い物、乗り物、UIの整理など、「モノとモノをくっつけて管理する」処理が非常に楽になります。

コメント

タイトルとURLをコピーしました