Delegates 和 Events 在unity中的使用

如何创建和使用委托Delegates 以提供复杂和动态功能在您的脚本上。

DelegateScript .cs

using UnityEngine;using System.Collections;public class DelegateScript : MonoBehaviour {delegate void MyDelegate(int num);MyDelegate myDelegate;void Start (){myDelegate = PrintNum;myDelegate(50);myDelegate = DoubleNum;myDelegate(50);}void PrintNum(int num){print ("Print Num: " + num);}void DoubleNum(int num){print ("Double Num: " + num * 2);}}

MulticastScript.cs

using UnityEngine;using System.Collections;public class MulticastScript : MonoBehaviour {delegate void MultiDelegate();MultiDelegate myMultiDelegate;void Start (){myMultiDelegate += PowerUp;myMultiDelegate += TurnRed;if(myMultiDelegate != null){myMultiDelegate();}}void PowerUp(){print ("Orb is powering up!");}void TurnRed(){renderer.material.color = Color.red;}}

如何创建一个动态的"broadcast广播"系统,,使用事件。

EventManager.cs

using UnityEngine;using System.Collections;public class EventManager : MonoBehaviour {public delegate void ClickAction();public static event ClickAction OnClicked;void OnGUI(){if(GUI.Button(new Rect(Screen.width / 2 – 50, 5, 100, 30), "Click")){if(OnClicked != null)OnClicked();}}}TeleportScript.cs

using UnityEngine;using System.Collections;public class TeleportScript : MonoBehaviour {void OnEnable(){EventManager.OnClicked += Teleport;}void OnDisable(){EventManager.OnClicked -= Teleport;}void Teleport(){Vector3 pos = transform.position;pos.y = Random.Range(1.0f, 3.0f);transform.position = pos;}}TurnColorScript.cs

using UnityEngine;using System.Collections;public class TurnColorScript : MonoBehaviour {void OnEnable(){EventManager.OnClicked += TurnColor;}void OnDisable(){EventManager.OnClicked -= TurnColor;}void TurnColor(){Color col = new Color(Random.value, Random.value, Random.value);renderer.material.color = col;}}

可以查看:Unity3D – 关于Delegate – SignalSlot信息槽的使用和SendMessage取替

都在努力为你驱逐烦恼焦躁,

Delegates 和 Events 在unity中的使用

相关文章:

你感兴趣的文章:

标签云: