hildsoftのコード置き場

プログラム関連で調べたことやコードの保管場所です

UnityでスクリプトからTransformコンポーネントを取得する方法

スポンサーリンク

UnityでスクリプトからTransformコンポーネントを取得する方法

検証環境

Unity:5.6.1f1

Transformコンポーネント

Transformコンポーネントは、すべてのGameObjectに追加される基本的なコンポーネントです。

位置、回転、スケール、親子情報などシーン内のGameObjectにアクセスするために使用します。

空のオブジェクトを作成しても追加されます。

f:id:hildsoft:20170616093504j:plain

アタッチされたゲームオブジェクトのTransformコンポーネントにアクセス

f:id:hildsoft:20170616100333j:plain

アタッチされているC#スクリプトから自身のTransformへは簡単にアクセスできます。

MonoBehaviourを継承していればフィールドにありますので、

Transform myTransform = this.transform;

だけで使用可能です。

親子間のTransformコンポーネントにアクセス

親の場合

var parentTransform = this.transform.parent;

子の場合

var childTransform = this.transform.Find("child_name");

// 古い取得方法
//var childTransform_old = this.transform.FindChild("child_name");

“child_name"部分に、Hierarchyに表示されている子要素の名前を設定してください。

それ以外のTransformコンポーネントにアクセス

親や子を伝って取ることがほとんどだと思いますが、親子関係にないオブジェクトは検索して取得することになります。

var anotherTransform1 = GameObject.Find("object_name").transform;
var anotherTransform2 = GameObject.Find("/parent/child").transform;

/で区切ることによって階層を指定して検索することもできます。

名前が同じものが複数ある場合は、最初に見つかったもの(Hierarchyの順とは限らない)が取得できますが、同じ階層で重複する名前は極力使わないようにしましょう。

また、Hierarchy上で灰色(Inspectorで使用をoff)にしている状態だと探せませんので、NullReferenceExceptionに注意してください。

関連リンク

Unity - スクリプトリファレンス: Transform

Unity - スクリプトリファレンス: GameObject.Find