4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数のComponentを簡単管理する方法

Last updated at Posted at 2015-09-17

 ※一旦削除したものの再掲載になります

 ゲーム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アセットのつもりで書いています。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?