ゲームAI備忘録

ゲームAIに使えそうな知識を備忘録として書き留める

人助けと思って何卒インストールをば! 詰碁/ アルコネ/ 五目並べ

Componentとしてスクリプトを動的に追加する方法

対象となるゲームオブジェクトの子要素として存在するゲームオブジェクトに対してスクリプトを追加しようとしたら,OnMouseDown() 関数が効かなかったのでメモ.
ドキュメントを読むとGUIElement か Collider をコンポーネントの一つとして追加してほしいとのことらしい.下記ソースではMeshCollider を使って解決しています.

コード

ゲームオブジェクトPuzzleの下にゲームオブジェクトPieceが複数並んでいる構成.

// PuzzleController.cs
public class PuzzleController : MonoBehaviour {
	void Start () {
		for (int i = 0; i < this.transform.childCount; ++i) {
			var piece = this.transform.GetChild(i).gameObject;
			piece.AddComponent(typeof(PieceListener).Name);
		}
	}
}

// PieceListener.cs
[RequireComponent(typeof(MeshCollider))] // これがないとOnMouseDownが動かない!
public class PieceListener : MonoBehaviour {
	void OnMouseDown() {
		Debug.Log("Piece was clicked.");
	}
}

参考URL

  • Unity - Script Reference - MonoBehaviour.OnMouseDown()

http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.OnMouseDown.html

  • C# のクラス名を文字列で取得する

http://program.station.ez-net.jp/special/vcs/struct/class_name.asp

  • OnMouseDown()が発生しない

http://d.hatena.ne.jp/specter1330/20111022/1319309326