《炉石传说》建筑设计欣赏(6):卡&在执行数据时,组织能力
2015-10-15 19:36
417 查看
上一篇文章我们看到了《炉石传说》核心存储卡的数据,今天,我们不断探索卡&身手。
Entity主要用来做网络数据同步用的;
Actor主要处理client的渲染对象的控制,作为Component挂载在资源对象上;
Spell是技能Prefab挂载的脚本。
Card是卡牌Prefab挂载的脚本。在执行时处于中心地位,处理前3者的联系。
详见GameState.CreateNewEntities()函数。由于Entity并非MonoBehavior派生类。所以是new出来的,然后加入到GameState中管理(GameState.AddEntity()),网络传来的Entity数据主要是Tags(每一个Tag是一个name->value对)。然后调用Entity.InitEntity();
相应于AssetFamily.Actor。
相应的资源包为“actor?.unity3d”,包内的为GameObject;
Actor的载入入口是在:Card.DetermineActorThenTransitionToZone()
真正的卡牌Prefab载入是在Entity.LoadCard()中进行的,这个函数是在处理PowerTask时GameState.OnShowEntity()中调用的。
详细的载入操作是通过 DefLoader.LoadCardDef()进行的。其内部再调用AssetLoader.LoadCardPrefab()来进行资源载入。
基本的类
通过之前的分析,卡牌&技能涉及到几个类体系:Entity。Actor。Card。Spell,令人十分困惑,特别是前两者。在这里先略带武断的说一下这几个类的基本定位:Entity主要用来做网络数据同步用的;
Actor主要处理client的渲染对象的控制,作为Component挂载在资源对象上;
Spell是技能Prefab挂载的脚本。
Card是卡牌Prefab挂载的脚本。在执行时处于中心地位,处理前3者的联系。
Entity
Entity是通过网络数据创建的,主要是Network.PacketID.POWER_HISTORY这个消息。详见GameState.CreateNewEntities()函数。由于Entity并非MonoBehavior派生类。所以是new出来的,然后加入到GameState中管理(GameState.AddEntity()),网络传来的Entity数据主要是Tags(每一个Tag是一个name->value对)。然后调用Entity.InitEntity();
Actor
Actor也是一种资源,通过AssetLoader.LoadActor()载入;相应于AssetFamily.Actor。
相应的资源包为“actor?.unity3d”,包内的为GameObject;
Actor的载入入口是在:Card.DetermineActorThenTransitionToZone()
Spell
Spell的载入入口是在Entity.ProcessCardDefAssetRequest()Card
在InitEntity中调用了Entity.InitCard(),它做的工作仅仅是创建一个空的GameObject,然后使用AddComponent把Card加入上去。真正的卡牌Prefab载入是在Entity.LoadCard()中进行的,这个函数是在处理PowerTask时GameState.OnShowEntity()中调用的。
详细的载入操作是通过 DefLoader.LoadCardDef()进行的。其内部再调用AssetLoader.LoadCardPrefab()来进行资源载入。
卡牌&技能的载入流程
Entity的创建,以及Card、Spell的载入,都由网络消息触发;整个过程比較复杂,主要是有非常多异步回调。比較难用文字描写叙述。请见下图:相关文章推荐
- 关于CUDA的一些学习资料
- 动态生成java、动态编译、动态加载
- Foundation框架--NSMutableArray的使用
- 语音信号分析
- java解析xml的几种方式
- 继电器的使用及其原理
- hdu 2711 Lost Cows
- 数据同步DataX
- 【程序员眼中的统计学(5)】排列组合:排序、排位、排
- PHP利用JPGRAPH画图不显示的解决
- 爱探险的小Z(单调队列)
- 【Python之旅】第七篇(一):再谈Python多线程
- 【Python之旅】第七篇(一):再谈Python多线程
- 路由器工作原理浅析
- Struts中ActionContext和ServletActionContext
- 一个示例让你明白适配器模式
- Tomcat配置文件之servlet.xml中选项介绍
- Android NFC MifareClassic详解
- Linux Vi编辑器的使用
- Nginx基础. HTTP多阶段处理大致分析