メソッドを他のクラスに委譲したいけどよくわっかんない。
UnityScriptはFunctionをそのまま引数に渡せるので楽。
例えば→ http://d.hatena.ne.jp/shinriyo/20120730/p3
しかし、C#はちがう。
ゲームを管理しているクラスでポイントの追加をしたいが、弾であるBulletにポイントを追加する処理を渡したい。
・委譲元のクラス(GameScript.cs)
ゲームのポイントを管理もしている。
public delegate void Delegater(); public class GameScript : MonoBehaviour { // 略 〜〜〜 // 略 〜〜〜 void Update() { Delegater delegateFunc = new Delegater(AddPoint); // bulletObjは弾のインスタンス bulletObj.GetComponent<HogeComponent>().HitFunc = delegateFunc; } voif AddPoint() { // 略 〜〜〜 // ポイントを追加する処理 // 略 〜〜〜 } }
・HogeComponentがアタッチされたオブジェクト
public class Hoge : MonoBehaviour { private Delegater hitFunc; public Delegater HitFunc { get{ return this.hitFunc; } set{ this.hitFunc = value; } } void OnTriggerEnter(Collider other) {; if (other.name == "Enemy") { hitFunc(); } } }
こんな感じ??
Aクラス→Bクラス→Cクラスといった関数のまた渡しもできた。
Aクラスではこれを
Delegater delegateFunc = new Delegater(HogeFunc);
hogeObj.GetComponent<HogeComponent>().MyDelegateFunc = delegateFunc;
B,CでこうすればOK
public Delegater MyDelegateFunc { get; set; } void Start() { Delegater delegateFunc = new Delegater(HogeFunc); hogeObj.GetComponent<HogeComponent>().MyDelegateFunc = delegateFunc; }