经过前面几次的尝试,我们对炉石的代码已经不陌生了。除了网络机制还没有了解以外,本机的逻辑已经比较熟悉了。

接下来继续向暴雪最NB的技能系统进发,我们的目标是:

  • 分析技能的静态数据描述;
  • 分析技能的运行时数据、逻辑组织;
这篇笔记主要记录对其分析静态数据。

静态数据组织

卡牌数据

  • 卡牌的基本数据对于的AssetFamily为:AssetFamily.CardXML;
  • 数据对于的资源包为“cardxml0.unity3d”;
  • 资源包中的资源类型为:TextAsset;
  • 资源加载使用的接口为:AssetLoader:LoadCardXml();
  • 运行时对应的数据类型为:EntityDef;
  • xml文件中保存有多个Entity对象数据,具体数据例如:
[html] view plain copy
  1. <Entity version="2" CardID="CS1_042">
  2. <Tag name="CardName" enumID="185" type="String">闪金镇步兵</Tag>
  3. <Tag name="CardSet" enumID="183" type="CardSet" value="2" />
  4. <Tag name="CardType" enumID="202" type="CardType" value="4" />
  5. <Tag name="Faction" enumID="201" type="Faction" value="2" />
  6. <Tag name="Rarity" enumID="203" type="Rarity" value="1" />
  7. <Tag name="Cost" enumID="48" type="Number" value="1" />
  8. <Tag name="Atk" enumID="47" type="Number" value="1" />
  9. <Tag name="Health" enumID="45" type="Number" value="2" />
  10. <Tag name="AttackVisualType" enumID="251" type="AttackVisualType" value="1" />
  11. <Tag name="CardTextInHand" enumID="184" type="String"><b>嘲讽</b></Tag>
  12. <Tag name="DevState" enumID="268" type="DevState" value="2" />
  13. <Tag name="Collectible" enumID="321" type="Bool" value="1" />
  14. <Tag name="EnchantmentBirthVisual" enumID="330" type="EnchantmentVisualType" value="0" />
  15. <Tag name="EnchantmentIdleVisual" enumID="331" type="EnchantmentVisualType" value="0" />
  16. <Tag name="ArtistName" enumID="342" type="String">Donato Giancola</Tag>
  17. <Tag name="HowToGetThisGoldCard" enumID="365" type="String">圣骑士达到57级后解锁。</Tag>
  18. <Tag name="FlavorText" enumID="351" type="String">如果闪金镇都是由1/2的步兵把守的话,那它早在多年以前就被毁了。</Tag>
  19. <Tag name="Taunt" enumID="190" type="Bool" value="1" />
  20. <Power definition="54e57583-ce5c-46e3-899a-39bd2181468d" />
  21. </Entity>

卡牌实体

  • 卡牌实体对象对应的AssetFamily为:AssetFamily.CardPrefab;
  • 数据对应的资源包为“cards?.unity3d”,目前共有4个;
  • 资源包中的资源类型为:Prefab;
  • 资源加载对应的接口为:AssetLoader:LoadCardPrefab();
  • 卡牌资源使用CardID进行索引,例如“闪金镇步兵”对应“CardID="CS1_042"”;
  • Prefab中的GameObject主要包含:Transform、Material、CardDef,这三个Component;
  • CardDef有很多CustomEditField,主要分为以下几类:
    • EditType.SOUND_PREFAB;
    • Material,主要是Portrait--头像;
    • EditType.SPELL,其实是string类型,保存的是Spell对象的资源路径;

技能对象

  • 技能对象对应的AssetFamily为:AssetFamily.Spell;
  • 数据对应的资源包为“spells?.unity3d”,目前共有3个;
  • 资源包中的资源类型为:Prefab;
  • 资源加载对应的接口为:AssetLoader:LoadSpell();
  • 卡牌通过CardDef中指定相关技能资源的路径;
  • Prefab中的GameObject主要包含:AudioClip、AudioSource、Material、ParticleSystem、ParticleSystemRenderer、Transform等组件;
  • 涉及到的脚本主要有:PlayerMaker相关的类,Spell及其派生类、SoundDef;
    我们看到Spell有很多的派生类,这里用到了一个小技巧:GetComponent()是可以把基类作为参数来获得子类对象的。例如,一个对象绑定了ArmorSpell对象,而ArmorSpell是Spell的派生类,那么gameObject.GetComponent<Spell>()是可以获得这个ArmorSpell对象的。
总结一下:
卡牌和技能相关的数据主要包括以上三种,其中EntityDef是使用“策划填表”或者类似的方式,而且卡牌和技能资源,则使用Unity编辑成Pefab。技能对象中用到了PlayerMaker插件。
本次分析涉及到的类,请详见下图。

最后,按照惯例,还是秀一下战绩:

《炉石传说》架构设计赏析(5):卡牌技能的静态数据组织相关推荐

  1. 炉石传说无法登录服务器未响应是什么意思,炉石传说:你还在卡大门无法登陆游戏吗?这些方法也许能帮到你...

    原标题:炉石传说:你还在卡大门无法登陆游戏吗?这些方法也许能帮到你 炉石传说的小伙伴们大家好,今天暗影崛起14.2更新补丁实装后,无法登陆游戏的bug又出现了,并且此次问题面很广,延续时间又很长,你还 ...

  2. 炉石传说职业梯队和强势卡牌推荐

    炉石传说作为的一款卡牌游戏,其故事以魔兽争霸的世界观为背景.从纳克萨玛斯到探险者协会再到如今的安戈洛和冰封王座版本,炉石传说的卡牌库发生了巨大的改变,特别是随着近两个版本中超模牌和DK的增加,竞技场的 ...

  3. 《炉石传说》架构设计赏析(6):卡牌 技能数据的运行时组织

    前一篇文章我们看到了<炉石传说>的核心卡牌数据的存储,今天我们继续探索卡牌&技能. 主要的类 通过之前的分析,卡牌&技能涉及到几个类体系:Entity,Actor,Card ...

  4. 《炉石传说》架构设计赏析(5):卡牌 技能的静态数据组织

    经过前面几次的尝试,我们对炉石的代码已经不陌生了.除了网络机制还没有了解以外,本机的逻辑已经比较熟悉了. 接下来继续向暴雪最NB的技能系统进发,我们的目标是: 分析技能的静态数据描述: 分析技能的运行 ...

  5. 《炉石传说》架构设计赏析(4):Asset管理

    话说,经过这段时间的学习和摸索,对于Unity3D的开发思路已经基本清晰了.唯独还剩下一个AssetBundle机制还没有搞透,这个涉及到前期项目的资源规划.资源管理代码的写法,以及自动更新机制的实现 ...

  6. 《炉石传说》架构设计赏析(1):游戏启动流程

    今年的Unity Awards两项大奖颁给了暴雪的<炉石传说>,这真是对Unity一个再好不过的宣传了--你看,暴雪都开始用Unity了.大家都知道,目前Unity发布的游戏大多都没有对程 ...

  7. 维伦机器人_炉石传说被忽略的神卡 维伦的恩泽

    前言 昨晚是NEL新年后的第一战,正好有空,就去看了看. 其实给我的第一感觉就是,双方还没有从新年的气氛中回过气来,各种失误相当之多,倒是鱼鱼的点评不错,虽然结结巴巴,但是真心眼光毒,看的准. 昨天感 ...

  8. c语言炉石传说模仿代码项目,炉石传说套牌代码功能:卡组文本编码一键导入...

    炉石传说即将到来的最新版本会带来一个全新的功能--套牌导入. 我们很快就能够轻松地通过"套牌导入"功能来复制和分享卡组了. 在构筑卡组时将不需要对着网页或者其他设备来回切换,一张牌 ...

  9. c语言炉石传说算法设计,CCF-CSP题解 201609-3 炉石传说

    模拟. 注意随从的编号在\(summon\)和\(attack\)随从死亡时都可能改变. #include using namespace std; struct tNode { int attack ...

最新文章

  1. Spring Boot+JWT+Shiro+MyBatisPlus实现Restful快速开发后端脚手架
  2. AngularJS2.0 quick start——其和typescript结合需要额外依赖
  3. Thinkphp3.2学习(一)
  4. 你真的了解NSNotificationCenter吗?
  5. 057-while循环
  6. Ubuntu 重置MySQL密码
  7. 999元/1499元起!Redmi Note 10系列正式首销
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线商城系统
  9. python查看函数帮助文档的方法
  10. tombstone 信息解析
  11. 回调函数原理及应用实例
  12. Pycharm_EmmyLua断点调试Lua
  13. 历时一年 Apache Spark 3.3.0 正式发布,新特性详解
  14. 计算机网络OSI模型的各层及主要功能
  15. office 复合文档数据结构解析“初探”
  16. Python学习笔记——基础篇【第六周】——shutil模块
  17. 让你重拾信心的单片机入门,小哥带你了解
  18. 通过xsd校验xml文件
  19. 【web渗透思路】框架敏感信息泄露(特点、目录、配置)
  20. 摄像头视频采集压缩及传输

热门文章

  1. 华为OD机试真题-最多等和不相交连续子序列【2023Q2】【JAVA、Python、C++】
  2. JavaScript内置对象----练习题
  3. 点赞封面未发送已删除_“每日优鲜APP发送商业短信案”宣判 法院认定退订费平台负担|退订|隐私政策|优鲜|资费...
  4. 电话信用标记数据的爬虫
  5. 敏捷开发与传统开发的区别
  6. 软件团队文档管理工具哪个好?
  7. CMD指令 javac不是内部指令
  8. mysql固态硬盘和机械硬盘的区别_固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异...
  9. 字节青训营第十三课之深入浅出RPC框架的笔记与总结.md
  10. 菜鸟流程-Touching App(2)- 设置界面