首先打开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 initialization
void Start () {
}
// Update is called once per frame
void 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 initialization
void Start () {
GameObject.Find ("Cube").GetComponent<testDelegate> ().GazeOn += touchR;
GameObject.Find ("Cube").GetComponent<testDelegate> ().GazeOff += touchU;
}
// Update is called once per frame
void 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挂上试试