《炉石传说》建筑设计欣赏(6):卡&在执行数据时,组织能力
2023-09-27 14:27:02 时间
上一篇文章我们看到了《炉石传说》核心存储卡的数据,今天,我们不断探索卡&身手。
基本的类
通过之前的分析,卡牌&技能涉及到几个类体系: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的载入,都由网络消息触发;整个过程比較复杂,主要是有非常多异步回调。比較难用文字描写叙述。请见下图:
版权声明:本文博主原创文章,博客,未经同意不得转载。
相关文章
- 【POJ 3694】 Network(割边<桥>+LCA)
- bzoj 1600 & Usaco 月赛 2008 建造栅栏 题解
- <九度 OJ>题目1545:奇怪的连通图
- PHP一个类引用另一个类&开源项目的简易使用
- python中lambda实现赋值和多语句 & 单行命令行中执行多语句
- 【C位运算&基础+面试题】位运算中阶详解及面试题
- UVaLive 6591 && Gym 100299L Bus (水题)
- xml & 编码
- Objective-C & Runtime
- Android 解决Retrofit URL query string “K={k}&V={v}“ must not have replace block. For dynamic query par
- 【C#】C#中 && || 条件执行顺序,同时存在 && ||如何判断
- 【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树
- 2022&2023华为OD机试 - 磁盘容量(Python)
- 运算符++的前缀、后缀和&的记录
- An internal error occurred during: "Building workspace". java.lang.StackOverflowError
- net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
- 练习 2-9 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。