拡張メソッド
Unityで
「一つ下の子要素のコンポーネントを全てとってきたいけど、GetComponentsInChildren()を使うと孫要素以下まで再帰的にとってきちゃう。一つ下だけでいいのに!」
というような、ありそうで微妙にない関数が欲しいというような時は、C#の拡張メソッドの機能で定義してやると便利です。
internal static class TransformExtension { public static List<T> GetComponentsInFirstChildren<T>(this Transform transform) where T : MonoBehaviour { var list = new List<T>(); for (var i = 0; i < transform.childCount; ++i) { var c = transform.GetChild(i).GetComponent<T>(); if (c != null) { list.Add(c); } } return list; } }
こういうのを適当なところ(自分はExtensions.csというファイルにまとめてます)に書くと、呼び出し側は
var components = transform.GetComponentsInFirstChildren<SomeClass>();
という感じ。スッキリ書ける。
インデックスバリデーション付きのListとか、色々なところで使いそうなやつは積極的に定義しとくと良さそう。