Unity-3D 委托Delegate

5 篇文章 0 订阅

我现在想要做一个类与类之间的通信。

概念啥的就不说了,我先写个在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,这样稍微有那么点意思了。









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值