はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】拡張メソッドで子オブジェクトのコンポーネントを楽に得る方法

はじめに

Unityで子オブジェクトの持つコンポーネントを利用することは多々あるのではないのでしょうか?
私自身もよく利用するのですが、毎回書くたびに”長くてめんどくせ~”と思います笑
そこで、今回は拡張メソッドを利用して少しでも短く書けるようにしたいと思います。

環境

・Unity2017.3.1p4

従来の方法

私はいつも下の書き方で子オブジェクトのメソッドを呼んでいます。

transform.Find ("ChildObject").gameObject.GetComponent<ChildScript> ().Hoge ();

今回は適当にChildObjectという名前の子オブジェクトが持つChildScriptというコンポーネントHogeメソッドを呼び出してみます。

下準備

上のコードを最初のtransformの後を拡張メソッドで省略してみたいと思います。

using System.Collections;
using UnityEngine;

public static class ExtensionMethods
{
	public static T GetChildComponent <T> (this Transform transform,string name) where T : Component
	{
		return transform.Find (name).gameObject.GetComponent<T> ();
	}
}

第2引数にstring型のnameを入れたのは、子オブジェクトの名前を取得したかったからです。

使用例

transform.GetChildComponent<ChildScript> ("ChildObject").Hoge ();

従来の方法で書いたコードをそっくりこのコードに変えてみてください!

最後に

まあそこそこは省略できたのではないでしょうか?
ただ、子オブジェクトの名前を書く場所が個人的にちょっと違和感がありますが・・・笑