GameFreamWork框架----事件系統的應用

事件系統用途普遍,對處理玩家數據有很大幫助(玩家金幣,經驗,等級),讓數據屢次調用,下降耦合ide

在unity中應用(以玩家金幣發生變化來演示);this

1).註冊監聽spa

2).移出監聽3d

3).金幣發生變化的時候,通知每一個界面code

操做:blog

1.將Event三個腳本導入工程中;事件

2.寫一個腳本,PlayerInforManagerTest,腳本主要做用是存儲用戶數據,其餘腳本須要數據時就在這個腳本中調用,利用事件系統get

 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腳本中添加須要改變數據的Keyit

 

4).寫一個腳本EventTest,做用是做爲改變數據而調用事件系統,至關於一個商店購買(出售)裝備時,金幣減小(增長),通知玩家PlayerInforManagerTest數據中心更新數據,從而讓其餘(如玩家揹包顯示金幣)腳本調用PlayerInforManagerTest時數據一致.io

 

 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文本,掛載腳本實現.

 

相關文章
相關標籤/搜索