阅读背景:

unity事件监听与分发

来源:互联网 

1)笔记

1)甚么叫做事件监听与分发?
  (1)游戏UI有金币、道具、血的数量...

2)问题的提出: 
  (1)游戏逻辑中,不同的地图,关卡或场景,当他们捡到这些金币、道具、血块的时候,
     怎样在UI界面上显示出来呢?
  (2)每一个游戏逻辑,都要hold住: 金币对应的label呢?  由于:游戏逻辑
     中的东西和UI界面上的label绑在了一起,非常的不便利!

3)问题的解决:
  (1)设计一个全局的 事件宣布与定阅体系,所有的都是通过这个体系来做;
  (2)界面上的UI代码,通过定阅金币转变的事件,当有这个事件产生的时候,
     会修正金币的显示;
  (3)那末在游戏逻辑中,当我们捡到金币的时候,我们不直接告知UI,把这个
     事件传递给对事件感兴致的人;
  (4)当我们在游戏中捡到金币的时候,宣布一个金币变更的事件丢给事件体系,
     然后事件体系会通知感兴致的所有代理;

4)实现:
  (1)事件分类管理表: 用 `字典` 存储;
  (2)事件定阅、事件派送;
  (3)定阅事件的回调函数都会被调用;

5)managers文件夹
  event_manager
  sound_manager
  res_manager
  net_manager
  ui_manager

6)用普通单例模式便可
  (1)由于事件分发,不须要借助节点和组件这个机制,用全局的便可以够了; 
  (2)当对事件感兴致的时候,就添加一个事件的回调函数 delegate;
  (3)string name, object udata: 假定你传递甚么事件过来,甚么数据过来,
    我们都可以应用object来处置, 也就是: System.Object,不是Unity.Object
    (object)100

7)我们的UI不知道外面的逻辑时是怎样样的,只要有金币的事件过来了,我们就更新一下;
  我们不须要知道UI究竟是谁,是哪几个节点负责显示这个金币,只须要派生这个事件就有了;

8)宣布就是遍历所有的代理,调用他们的回调函数;

9)app停掉的时候,OnDestroy也会被调用;

10)实质:
  (1)弄个字典,把类型和回调函数到一起;
  (2)宣布一个事件,就是调用这个事件监听的每一个个回调函数;
  (3)定阅一个事件,就是把delegate加到字典中;
  (4)当事件产生的时候,统一调用;
  (5)test_ui和game_scene他们2个就彼此不知道谁去应用,我只管宣布
      谁对这个这个事件感兴致的人去吸收便可,我只用期待事件过来,
      我也不管事件是谁发的,我准确的显示就行了;

1)甚么叫做事件监听与分发?
  (1)游戏UI有金币、道具、血的数量...

2)问



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: