实现功能:
发生某事情(按下某键、点击某物体),触发某事件(声明的事件),所有已订阅该事件的方法会监听到该事件被触发,所有已订阅的方法会执行
思路:
脚本1作为发布者,声明事件
脚本2:给脚本1对应的事件添加方法
脚本3:给脚本1对应的事件添加方法,执行委托
注意:单例脚本也许挂载到游戏物体上!在重新加载场景时,最好释放事件,否则可能发生问题
脚本1
using UnityEngine; public class Skode_EventHandler : MonoBehaviour { public static Skode_EventHandler instance; private void Awake() { instance = this; } public delegate void Handler(string content); //实例委托 public Handler GameReset; }
脚本2
using UnityEngine; public class Skode_EventHandler1 : MonoBehaviour { private void Start() { Skode_EventHandler.instance.GameReset += Skode_Method; } private void Skode_Method(string content) { Debug.Log("hi,woshi 1"); } }
脚本3
using UnityEngine; public class Skode_EventHandler2 : MonoBehaviour { private void Start() { Skode_EventHandler.instance.GameReset += Skode_Method; } private void Skode_Method(string content) { Debug.Log("hi,woshi 2"); } private void Update() { //回车键 if (Input.GetKeyDown(KeyCode.Return)) { if (Skode_EventHandler.instance.GameReset != null) Skode_EventHandler.instance.GameReset("我是Skode"); } } }