作用:訪問其它腳本時,不直接訪問,而是通過發送一條“命令”,讓監聽了這條“命令”的腳本自動執行對應的邏輯。
原理:
1、讓腳本向事件中心添加事件,監聽對應的“命令”。
2、發送“命令”,事件中心就會通知監聽了這條“命令”的腳本,讓它們自動執行對應的邏輯。
?
事件中心管理器:添加事件、發送命令
員工類? ?將方法注冊進事件中心管理器
public class Cube : MonoBehaviour
{private void Awake(){EventCenterManager.Instance.AddListener("開工", Write);}public void Write(){transform.position += Vector3.right;Debug.Log("我是策劃,我在寫策劃案");}
}
事件管理中心類
public class EventCenterManager : SingletonPatternBase<EventCenterManager>
{//鍵表示命令的名字//值表示命令具體要執行的邏輯Dictionary<string, UnityAction> eventsDictionary = new Dictionary<string, UnityAction>();public void AddListener(string key,UnityAction call){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key] += call;}elseeventsDictionary.Add(key, call);}/// <summary>/// 取消監聽的命令/// </summary>public void RemoveListener(string key,UnityAction call){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key] -= call;}}//發送命令public void DisPatch(string key){if (eventsDictionary.ContainsKey(key)){eventsDictionary[key]?.Invoke();}}
想要調用方法就直接DIsPatch? 命令名? 調用
Stopwatch類測試性能
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.Events;/// <summary>
/// Stopwatch類的工具類,用于計算運行一段代碼所用的時間
/// </summary>
public class StopwatchUtility
{/// <summary>/// 獲取執行一段代碼所需要的時間/// </summary>/// <param name="call"></param>/// <returns></returns>public static TimeSpan GetTime(UnityAction call){//聲明一個計數器Stopwatch timer = Stopwatch.StartNew();//開啟計時器timer.Start();//要測試什么代碼就將代碼放在這里call?.Invoke();//停止計時器timer.Stop();//返回時間信息return timer.Elapsed;}public void PrintTime(UnityAction call){UnityEngine.Debug.Log(GetTime(call));}
}