コードの型
あるオブジェクトを、別のオブジェクトの子階層に移動させます。
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の整理など、「モノとモノをくっつけて管理する」処理が非常に楽になります。

コメント