zoukankan      html  css  js  c++  java
  • 《炉石传说》建筑设计欣赏(6):卡&在执行数据时,组织能力

    上一篇文章我们看到了《炉石传说》核心存储卡的数据,今天,我们不断探索卡&身手。微笑


    基本的类

    通过之前的分析,卡牌&技能涉及到几个类体系: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的载入,都由网络消息触发;整个过程比較复杂,主要是有非常多异步回调。比較难用文字描写叙述。请见下图:

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4883464.html
Copyright © 2011-2022 走看看