GameFreamWork框架----事件系统的应用
程序员文章站
2023-03-31 09:54:03
事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合 在unity中应用(以玩家金币发生变化来演示); 1).注册监听 2).移出监听 3).金币发生变化的时候,通知每个界面 操作: 1.将Event三个脚本导入工程中; 2.写一个脚本,PlayerInfor ......
事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合
在unity中应用(以玩家金币发生变化来演示);
1).注册监听
2).移出监听
3).金币发生变化的时候,通知每个界面
操作:
1.将event三个脚本导入工程中;
2.写一个脚本,playerinformanagertest,脚本主要作用是存储用户数据,其他脚本需要数据时就在这个脚本中调用,利用事件系统
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 }
3).在事件系统的eventkey脚本中添加需要改变数据的key
4).写一个脚本eventtest,作用是作为改变数据而调用事件系统,相当于一个商店购买(出售)装备时,金币减少(增加),通知玩家playerinformanagertest数据中心更新数据,从而让其他(如玩家背包显示金币)脚本调用playerinformanagertest时数据一致.
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 }
5).在unity中添加button和金币text文本,挂载脚本实现.