unity代理委托的简单用法

来源:互联网 发布:乌鲁木齐 中亚 知乎 编辑:程序博客网 时间:2024/04/28 20:09

首先打开unity,然后新建个脚本叫testDelegate,内容为:

using System.Collections;using System.Collections.Generic;using UnityEngine;public struct teteEventArgs{public float distance;}public delegate void teteEventHandler(object sender, teteEventArgs e);public class testDelegate : MonoBehaviour {public event teteEventHandler GazeOn;public event teteEventHandler GazeOff;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKeyDown (KeyCode.R)) {Debug.Log("点击r    1");teteEventArgs e;e.distance = 100;if (GazeOn != null) {Debug.Log("点击r    2");GazeOn (this, e);}}if (Input.GetKeyDown (KeyCode.U)) {Debug.Log("点击u    1");teteEventArgs e;e.distance = 50;if (GazeOff != null) {Debug.Log("点击u    2");GazeOff (this, e);}}}}

保存,然后回到unity场景里,新建个cube挂载上这个脚本,可以点击运行试试,点击r或者u都只会执行到log1的位置,证明这两个代理都是空的。

接下来需要写接收的代码,再新建个c#脚本叫testDelegate2,内容为:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class testDelegate2 : MonoBehaviour {// Use this for initializationvoid Start () {GameObject.Find ("Cube").GetComponent<testDelegate> ().GazeOn += touchR;GameObject.Find ("Cube").GetComponent<testDelegate> ().GazeOff += touchU;}// Update is called once per framevoid Update () {}void touchR(object sender, teteEventArgs e){Debug.Log ("点击到了r键,进行回调 distance为 " + e.distance);}void touchU(object sender, teteEventArgs e){Debug.Log ("点击到了u键,进行回调 distance为 " + e.distance);}}


回到场景新建个sphere挂上试试

原创粉丝点击