154401eqc1kjqb6dydz0fk.png
  这是我猜测的这些类和游戏内容的对应关系,没有太仔细分析,可能有些对应是错误的:

1544050cf8g6t98gm9qg9z.png
  下面我们就挑选一个简单的Scene来分析一下它的内部运作机制,我们来看一下AdventureScene吧。Adventure相关的Class很多,我们只做一个粗略的分析,只涉及到下面这几个类和接口:

1544057888m8g7868gxugy.png
  首先我推测,在Hub屏幕中点击中间的【Solo Adventure】(冒险模式)按钮之后,通过我们前文分析的LoadScene流程,加载了一个冒险模式相关的Scene。它里面有一个GameObject绑定了“AdventureScene”这个脚本,我们可以看到AdventureScene:Awake()方法中主要是注册了很多事件的回调。

  我们可以看到有一个“AdventrueSubScenes”枚举,它基本上对应了下图中的按钮:

 

 

  1. public enum AdventureSubScenes
  2. {
  3. Chooser,
  4. Practice,
  5. MissionDeckPicker,
  6. NormalHeroic,
  7. ClassChallenge
  8. }

  接下来还有一个AdventureSubScene是处理子场景对应的一些逻辑的。

  我们看到有“AdventureChooserTray”这个类:

  我推测这个类就是用来处理上面这个游戏画面的UI交互操作的;

  这个类在Awake时,通过调用“CreateAdventureChooserButton()”方法创建了上图中的上部分那几个冒险游戏内容模式相关的按钮;

  这些按钮都绑定了事件回调:AdventureChooserTray.ButtonModeSelected();当这些按钮被点击时,主要是调用:

 

 

  • AdventureConfig:SetSelectedAdventureMode(),此函数修改内部数据之后触发事件:FireSelectedModeChangeEvent()
    • AdventureChooserTray通过OnSelectedModeChange()响应此事件,这也就是点击上面那几个按钮之后要做的一些处理:包括更新左侧的画面、设置Choose按钮状态等等;
      • 其中调用了PlayMakerFSM,主要是向其发送事件“Burst”;通过这里,我们可以确定炉石使用了PlayerMaker插件。

        AdventureScene也通过OnSelectedModeChanged()相应了此事件;

        它里面还有一个“PlayButton m_ChooseButton”成员变量,并把为它添加了EventListener,用来调用ChangeSubScene()方法。这就和游戏实际的操作对应上来:在上面选择模式,然后点击下面的【Choose】按钮,就进行到下一步的选择了。

        AdventureChooserTray:ChangeSubScene()通过Coroutine的方式调用了AdventureConfig:ChangeSubSceneToSelectedAdventure(),然后调用了AdventureConfig:ChangeSubScene();它主要触发两个事件:

       
      • FireSubSceneChangeEvent:AdventureScene通过OnSubSceneChange()函数响应它,主要是调用AdventureScene:LoadSubScene(),内部主要是调用AssetLoader.LoadUIScreen();
        • FireAdventureModeChangeEvent:AdventureScene通过OnAdventureModeChanged()响应它。

          通过上面的分析,我们大致了解了上面这个游戏截图中的操作实现逻辑。

          这次的分析算是一次热身,接下来重点分析有两个方面:

         
        • 游戏逻辑的组织,特别是技能的数据、逻辑组织;这可能需要经过多次尝试,慢慢接近;
          • 游戏的Asset资源管理、加载机制;

            OK,今天的分析就到这里,欢迎大家拍砖。后续分析敬请期待!

            顺便来秀一下我的鱼人部队,别看这些1点学的小东西,加在一起还蛮欢乐的!

          154412j09jshaiathj009h.png
            相关阅读游戏框架设计Ⅰ—— 游戏中的事件机制

          锐亚教育

          锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛