我现在想要做一个类与类之间的通信。
概念啥的就不说了,我先写个在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,这样稍微有那么点意思了。