我現在想要做一個類與類之間的通信。
概念啥的就不說了,我先寫個在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,這樣稍微有那麼點意思了。