動的に追加するコンポーネントを選択


コンポーネントを追加する際に、状況に応じて追加したいコンポーネントを変える方法。
C#ではClass型を変数に格納することはできないので(?)、typeof()でその型がもつType型(型宣言)が取得できる。UnityではAddComponent<T>()の他にAddComponent(Type componentType)があるので、生成したいコンポーネントをType型で渡してあげれば動的に追加するコンポーネントが選べる。
(そもそもこんなやり方でいいのかな…)

using System;
using UnityEngine;

public class TypeTest : MonoBehaviour {
	ComponentChoser compChoser = new ComponentChoser();

	void Start() {
		this.gameObject.AddComponent(this.compChoser.ChoseComponent());
	}
}

/// <summary>
/// コンポーネントを選んでくれる。
/// </summary>
public class ComponentChoser {
	enum ComponentType {
		TypeA,
		TypeB,
		TypeC
	}

	ComponentType createType = ComponentType.TypeB;

	public Type ChoseComponent() {
		Type t = null;

		switch (this.createType) {
			case ComponentType.TypeA:
				t = typeof(A);
			break;

			case ComponentType.TypeB:
				t = typeof(B);
			break;

			case ComponentType.TypeC:
				t = typeof(C);
			break;
		}

		return t;
	}
}

/// <summary>
/// 作られるコンポーネント。
/// </summary>
public abstract class Base : MonoBehaviour {}
public class A : Base {}
public class B : Base {}
public class C : Base {}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です