Unity-3D 委託Delegate

我現在想要做一個類與類之間的通信。

概念啥的就不說了,我先寫個在Unity3D中的小Demo

建立一個Cube,一個Cube腳本,綁在Cube上。腳本內容:

using UnityEngine;
using System.Collections;
public delegate void Delegate();
public class Cube : MonoBehaviour {
	//public delegate void Delegate();//定義委託,注意返回類型和參數  
	public Delegate delegateFun;//定義委託變量(委託是一個數據類型
	// Use this for initialization
	void Start () {
		delegateFun=new Delegate(Up);
		//deleteFun = Up;
		delegateFun ();
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void Up(){
		Debug.Log ("Cube is UP!");
	}
}
運行結果:

Cube is UP!

成功!


進一步,寫一個Main類綁定在攝像機上,調用Cube類中的Up怎麼辦

看代碼:

Cube.cs

using UnityEngine;
using System.Collections;
public delegate void Delegate();
public class Cube : MonoBehaviour {
	public static Delegate delegateFun;

	void Awake(){
		delegateFun=new Delegate(Up);
	}

	void Up(){
		Debug.Log ("Cube is UP!");
	}
}
Main.cs

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
	void Start () {
		Cube.delegateFun ();
	}
}
ok,能運行出來結果。

需要注意的是 Awake執行在Start之前,如果delegateFun實例化在原來的Start中就會造成空指針。

把這個變量直接static可通過類直接調用。(還是沒到自己想要的結果)


進一步,在抽,抽出一個Message,注意這個類,不用綁定在任何對象上。

Cube.cs

using UnityEngine;
using System.Collections;
public class Cube : MonoBehaviour {

	void Awake(){
		Message.delegateFun=new Delegate(Up);
	}

	void Up(){
		Debug.Log ("Cube is UP!");
	}
}

Main.cs

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
	void Start () {
		Message.delegateFun();
	}
}

Message.cs

using UnityEngine;
using System.Collections;

public delegate void Delegate();
public class Message : MonoBehaviour
{
	
	public static Delegate delegateFun;

}

ok,這樣稍微有那麼點意思了。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章