※一旦削除したものの再掲載になります
ゲームUIを作っていて、イメージやラベルを配置してコントロールする際に用いた方法です。
MenuManager
using System.Collections.Generic;
class Menu {
Dictionary<string, UILabel> m_Labels = null;
void Awake () {
m_Labels = new Dictionary<string, UILabel> ();
// 自身以下のUILabelを取得
UILabel[] labels = this.GetComponentsInChildren <UILabel> ();
foreach (UILabel label in labels) {
if (m_Labels.ContainsKey (label.name)) {
continue;
}
// アタッチされているGameObjectの名前で登録
m_Labels.Add (label.name, label);
}
}
void Start () {
m_Labels ["Name"].text = "naoK";
m_Labels ["HP"].text = "100/100";
}
}
任意のコンポーネントを全てDictionaryに登録して、コンポーネントのアタッチされているオブジェクトの名前で要素にアクセスするので、実際に配置されているオブジェクトとの関連が分かりやすいです。
Dictionaryを用いるので、オブジェクトの名前はユニークでなければいけません。これは明示的に命名を強制させる事に繋がるため、用途が不明なオブジェクトを減らすメリットがあります。
デメリットとしては、特に触る必要の無いオブジェクトまで登録してしまう事です。foreachなどを使って一括で処理を行うと、予期せぬ不具合を起こす可能性があります。
・実際にはAwakeで行っている処理をジェネリックなものにして使っています。
・コード上の『UILabel』はNGUIアセットのつもりで書いています。