欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

GameFreamWork框架----事件系统的应用

程序员文章站 2023-03-31 09:54:03
事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合 在unity中应用(以玩家金币发生变化来演示); 1).注册监听 2).移出监听 3).金币发生变化的时候,通知每个界面 操作: 1.将Event三个脚本导入工程中; 2.写一个脚本,PlayerInfor ......

事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合

GameFreamWork框架----事件系统的应用

在unity中应用(以玩家金币发生变化来演示);

1).注册监听

2).移出监听

3).金币发生变化的时候,通知每个界面

操作:

1.将event三个脚本导入工程中;

GameFreamWork框架----事件系统的应用

2.写一个脚本,playerinformanagertest,脚本主要作用是存储用户数据,其他脚本需要数据时就在这个脚本中调用,利用事件系统

GameFreamWork框架----事件系统的应用

GameFreamWork框架----事件系统的应用

GameFreamWork框架----事件系统的应用
 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

GameFreamWork框架----事件系统的应用

 

4).写一个脚本eventtest,作用是作为改变数据而调用事件系统,相当于一个商店购买(出售)装备时,金币减少(增加),通知玩家playerinformanagertest数据中心更新数据,从而让其他(如玩家背包显示金币)脚本调用playerinformanagertest时数据一致.

 GameFreamWork框架----事件系统的应用

GameFreamWork框架----事件系统的应用
 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文本,挂载脚本实现.

 GameFreamWork框架----事件系统的应用