プレハブからインスタンスを生成し、マウスでクリックされた際に実行されるデリゲートを設定するサンプル。
プレハブの作成
HierarchyにCube(Primitive)を作成し、以下のスクリプトを追加してプレハブ(Cube)を作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using UnityEngine; using System.Collections; public class Cube : MonoBehaviour { public delegate void DelegateFunc(); public DelegateFunc callbackOnMouseDown = null; string _strName; public string StrName { set { _strName = value; } get { return _strName; } } void OnMouseDown() { print("Cube - onMouseDown() : " + _strName); if (callbackOnMouseDown != null) callbackOnMouseDown(); } } |
プレハブ(Cube)を作成したら、Hierarchyからは削除しておく。
メインクラスの作成
HierarchyにGame Object(Empty)を生成し、以下のスクリプトを追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using UnityEngine; using System.Collections; public class MainClass : MonoBehaviour { public GameObject _prefab; GameObject _obj1, _obj2; Cube _cube1, _cube2; void Start() { _obj1 = Instantiate(_prefab, new Vector3(-1, 0, 0), Quaternion.identity) as GameObject; _cube1 = _obj1.GetComponent<Cube>(); _cube1.StrName = "1st Cube"; _cube1.callbackOnMouseDown = onClickCube1; _obj2 = Instantiate(_prefab, new Vector3(1, 0, 0), Quaternion.identity) as GameObject; _cube2 = _obj2.GetComponent<Cube>(); _cube2.StrName = "2nd Cube"; _cube2.callbackOnMouseDown = onClickCube2; } public void onClickCube1() { print("MainClass - onClickCube1() : " + _cube1.StrName); } public void onClickCube2() { print("MainClass - onClickCube2() : " + _cube2.StrName); } } |
Inspectorで先ほど作成したプレハブをprefabへ設定する。
実行結果
画面には2つのCube(プレハブ)が表示される。
左右のCubeをクリックするとConsoleに以下のように表示される。
Cubeがクリック(MouseDown)されると、
1. CubeクラスのOnMouseDownが実行される。
2. デリゲートが設定されていれば(nullでなければ)実行する。
3. デリゲートとして設定しておいたMainClassの関数(onClickCubeX)が実行される。
のように動作する。
コメントを残す
コメントを投稿するにはログインしてください。