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()が発生しない