事件系統用途廣泛,對處理玩家數據有很大幫助(玩家金幣,經驗,等級),讓數據多次調用,降低耦合 在unity中應用(以玩家金幣發生變化來演示); 1).註冊監聽 2).移出監聽 3).金幣發生變化的時候,通知每個界面 操作: 1.將Event三個腳本導入工程中; 2.寫一個腳本,PlayerInfor ...
事件系統用途廣泛,對處理玩家數據有很大幫助(玩家金幣,經驗,等級),讓數據多次調用,降低耦合
在unity中應用(以玩家金幣發生變化來演示);
1).註冊監聽
2).移出監聽
3).金幣發生變化的時候,通知每個界面
操作:
1.將Event三個腳本導入工程中;
2.寫一個腳本,PlayerInforManagerTest,腳本主要作用是存儲用戶數據,其他腳本需要數據時就在這個腳本中調用,利用事件系統
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class PlayerInfoManagerTest { 6 7 #region 單例模式 8 private static PlayerInfoManagerTest instance; 9 10 public static PlayerInfoManagerTest Instance 11 { 12 get 13 { 14 if (instance == null) 15 { 16 instance = new PlayerInfoManagerTest(); 17 } 18 return instance; 19 } 20 } 21 22 private PlayerInfoManagerTest() { } 23 #endregion 24 25 26 private int playerGold; 27 28 public int PlayerGold { 29 30 get { return playerGold; } 31 32 set { 33 //之前玩家金幣數值 != 設置過來的數值 34 if (playerGold != value) 35 { 36 playerGold = value; 37 //數值發生變化 通知註冊當前 金幣發生變化的 界面 38 EventDispatcher.TriggerEvent<int>(EventKey.OnPlayerGoldChange, playerGold); 39 40 } 41 42 43 44 } 45 } 46 47 48 49 }View Code
3).在事件系統的EventKey腳本中添加需要改變數據的Key
4).寫一個腳本EventTest,作用是作為改變數據而調用事件系統,相當於一個商店購買(出售)裝備時,金幣減少(增加),通知玩家PlayerInforManagerTest數據中心更新數據,從而讓其他(如玩家背包顯示金幣)腳本調用PlayerInforManagerTest時數據一致.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEngine.UI; 5 6 7 public class EventTest : MonoBehaviour { 8 9 public Text goldText; 10 11 // Use this for initialization 12 void Start() 13 { 14 EventDispatcher.AddEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange); 15 } 16 17 void OnPlayerGoldValueChange(int gold) 18 { 19 goldText.text = gold.ToString(); 20 } 21 22 // Update is called once per frame 23 void Update() { 24 25 } 26 private void OnDestroy() 27 { 28 EventDispatcher.RemoveEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange); 29 30 } 31 32 public void OnClickToAddGold() 33 { 34 PlayerInfoManagerTest.Instance.PlayerGold += 100; 35 } 36 }View Code
5).在unity中添加button和金幣Text文本,掛載腳本實現.