位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享《炉石传说》架构设计赏析(1):游戏启动流程(炉石 xhope),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:17173 炉石传说,炉石传说架是什么意思,炉石 xhope,炉石传说!,炉石 xhope,炉石 xhope,炉石传说!,18183炉石传说,内容如对您有帮助,希望把文章链接给更多的朋友!

转自: Awards两项大奖颁给了暴雪的《炉石传说》,这真是对Unity一个再好不过的宣传了——你看,暴雪都开始用Unity了。大家都知道,目前Unity发布的游戏大多都没有对程序集进行混淆、加密,所以作为一个炉石的玩家&Unity的初学者,自然不能错过这个机会。让我们好好看一下暴雪的代码吧。

炉石传说的游戏内容的非常丰富多彩,所以我花了一些时间分析了其程序集,将一些设计思路记录下来,与大家分析。欢迎各路高手拍砖,欢迎转载。

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

做这些分析的主要目的是:

看看炉石如何组织游戏逻辑,以支撑复杂的技能逻辑、表现等;看看炉石是如何使用Unity的,其结构设计和技巧上有什么&#;得学习的地方;向暴雪的程序员好好学习一下英语。下面我们就正式开始。我习惯先分析一下游戏的启动流程,这中间就涉及到了游戏基础数据的管理&初始化,各种管理器级别的类,以及相互引用关系也会初步显现。

首先看一下我找到的一些游戏启动过程相关的类,下面是他们的类图:

接下来我们分析一下游戏启动的操作流程。

ApplicationMgr对象应该绑定到了一个场景对象中,这个场景应该在游戏启动中加载;ApplicationMgr:Awake()被Unity引擎自动调用;调用ApplicationMgr:Initialize(),在这个函数中顺序调用了以下成员函数来进行初始化:InitializeMode():设置模式为ApplicationMode.PUBLIC;InitializeUnity():设置了UnityEngine. Application的一些属性;InitializeGame():看来核心的内容在这里,初始化Network,GameMgr等;InitializeWindowTitle();InitializeOptionValues();游戏启动应该不只这点东西。由于我们纯靠程序集的动态分析,无法知道它的场景编辑、对象的脚本绑定,也不能跟踪调试,所以只能靠猜测了。另外,一些事件是通过网络消息触发的,这也给静态分析带来了一些难度。OK,我们继续。我注意到了class Login,它从Scene派生。查看了一下Scene的派生类还有不少,我猜测每个派生类,作为特定Scene逻辑处理的脚本。而Login应该是在第0个场景中被激活运行。我们看一下Login:Start(),这属于MonoBehavior自动调用,他主要做了这样几件事:注册了一些资源版本检测、Login相关的网络消息回调;通知SceneMgr场景加载完成;调用成员函数:AutoLogin();此函数调用Network.AutoLogin();从配置文件中找到User Name,然后调用ConnectAPI.AutoLogin()——奇怪的是发现这个函数只是简单的返回false,并没有进行实际的操作。我们在来看一下Login:Update(),这个也是属于被自动调用的脚本函数。在这里它检测了Login的状态,并调用了成员函数LoginOk(),而它有主要调用了AssetsVersionCheckCompleted(),这个函数内容很丰富:通知其他模块,已经登录成功,包括:BaseUI、 InactivePlayerKicker、HealthyGamingMgr、GameMgr;调用一些模块的Initialize函数,包括:DefLoader、CollectionManager、AdventureProgressMgr、Tournament、StoreManager等;我们前面看到了Login从Scene派生,并且还有一个SceneMgr类。我们可以断定游戏根据不同的逻辑划分成了一些scene,接下来我们就探索一下Scene切换的流程。还是从Login入手。以下流程都是在Login类中完成,下面描述的过程都是Login成员函数的调用:首先我找到了Login:OnNetCacheReadyStep2()函数,这个应该是login流程中某一步的网络消息回调函数;它会调用 WaitForAchievesThenInit()这个Coroutine函数,这个函数检测了是否需要播放视频,然后调用ReconnectOrChangeMode();此函数处理重新连接,一般的话应该是调用了ChangMode();ChangMode()处理了新手教程相关的启动逻辑,一般的话会调用ChangeMode_Hub();这个地方貌&#;是调用了一个技能特效,特效播放完成之后调用回调函数:OnStartupHubSpellFinished();此函数调用ShowUnAckedRewardsAndQuests();这里面主要是调用了HandleUnAckedRewardsAndCompletedQuests(),哦~,这应该是游戏启动的时候显示当前任务还有未领取的奖励的那个界面;它会调用ShowNextUnAckedRewardOrCompletedQuest();其中主要调用了ShowWelcomeQuests();当幸亏显示的任务为0时,则调用了这一句:SceneMgr.Get().SetNextMode(SceneMgr.Mode.HUB),这是关键的一步了;接下来就我们跳转到SceneMgr类中,继续探索Scene切换流程的实现。以下都是指的SceneMgr的成员函数:SetNextMode()函数主要就是把“m_nextMode”成员变量设置为了指定&#;;接下来看一下Update(),这个函数主要是检测了是否需要切换Mode,然后调用了:SwitchMode():这个是一个Coroutine,它主要是调用了LoadModeFromModeSwitch(),它的核心也是调用LoadMode();直接调用LoadMode()LoadMode()函数,主要是根据当前的Mode,调用LoadScene();LoadScene()函数主要是调用了: Application.LoadLevelAdditiveAsync(this.sceneName);这样就完成了场景的切换。OK。通过以上分析,我们大体了解了游戏启动过程是这样的:进行账户验证;账户验证完毕之后,显示未领取的奖励和任务;然后切换到SceneMgr.Mode.HUB模式,即加载了相应的Scene。关于游戏启动的分析告一段落,下一篇将会分析一下炉石的Scene组织。

Unity3D热更新全书-何谓热更新,为何热更新,如何热更新 Unity3D热更新全书-何谓热更新,为何热更新,如何热更新首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律。为何赞叹中文?因

Genesis-3D,搜狐畅游的免费开源游戏引擎 在CSDN上看到了《搜狐畅游发布3D游戏引擎Genesis-3D基于MIT协议开源》的新闻,就把这个引擎下载安装了。用过Unity3d的朋友会发现,Genesis-3D的界面非常类

Unity3d 调整UI和粒子特效的层次关系 在Uniyt3d开发中,在UI上增加粒子特效是个很出彩的做法。但往往会遇到粒子特效与UI层次错乱的问题。下面分享一个自己的写得小的代码,轻松解决层次

标签: 炉石 xhope

本文链接地址:https://www.jiuchutong.com/biancheng/375689.html 转载请保留说明!

上一篇:3dsMax插件开发环境配置

下一篇:Unity3D热更新全书-何谓热更新,为何热更新,如何热更新(unityxlua热更新方案)

  • 进项税抵扣怎么做账
  • 哪些企业需要缴纳企业所得税?
  • 简易计税会计分录举例
  • 企业代扣代缴个人所得税系统
  • 建筑服务增值税税率
  • 国内增值税专用发票造假第一大案
  • 交通运输企业的装卸业务的全部费用
  • 企业所得税公益捐赠扣除限额
  • 什么情况下是应收账款
  • 滞销款的最好销售办法
  • 收到技术咨询费摘要
  • 出售房产税收
  • 如何查询进项发票是否作废
  • 去税局代开增值税专票需要什么资料?
  • 核定征收企业所得税的小型微利企业不得享受优惠政策
  • 年终奖缴税将有大变化
  • 无形资产属于什么行业
  • 湖北个体户网上申报
  • 月销售额3万以下免征
  • 税收征收管理权是什么
  • 1697511157
  • 新手会计怎么入门做账
  • 工会经费的会计分录2022
  • windows11启动卡在转圈圈
  • 平时发票未上传怎么回事
  • 自产原材料
  • php过滤数组中的空字符串
  • 固定资产进项发票
  • 艾叶泡脚的方法和注意事项
  • PHP:Memcached::setOptions()的用法_Memcached类
  • rteng7.exe - rteng7是什么进程 有什么用
  • 宜搭下载
  • Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑
  • web过滤器的常见应用
  • gpt3 plug
  • python爬虫中数据接口的含义
  • 6月收到4月的单子怎么办
  • 0申报残保金逾期影响企业信用评级吗为什么
  • mac的配置
  • sqlserver2005没有服务器名称
  • 数据库镜像是什么意思
  • 金税盘地区编号怎么查
  • 个体户注销流程 就找三合一企服
  • 小规模纳税人批发零售税率
  • 应收账款无法收回会计分录
  • 收到残障金退回怎么处理
  • 行政拨款给工会的账务处理
  • 工资挂账怎样做账
  • 未开票的收入如何确认分录
  • 房地产企业简易计税和一般计税的区别
  • 可供分配的利润分配顺序
  • 建筑业异地预交税款最新规定
  • 疫情期间购买消毒弥雾机的请示
  • 增值税专用发票查询系统官方网站
  • 专用发票金额大实际报销金额小会计分录怎么做
  • 免抵税额和免抵退税额一样吗
  • centos更新命令
  • smagent.exe - smagent是什么进程
  • 开机后cpu占用高
  • mac m1读取ntfs
  • mac 特殊符号
  • members-area.exe是什么进程 members-area进程查询
  • xp密码忘记了怎么办大神
  • 怎么提高局域网安全
  • newdot.exe - newdot是什么进程 有什么用
  • linux find命令详解xargs
  • jquery插件是干什么的
  • 游戏开发那些事
  • ftp下载工具能自动登录ftp服务器
  • python登录网站爬取数据
  • Node.js中的什么模块是用于处理文件和目录的
  • jquery代码实现鼠标点击
  • chrome调试js
  • Re: Latest Version: 3.7.9 (January 18th, 2015)
  • javascript 函数
  • 叠加计算公式
  • 车辆购置税是国税吗
  • 土地增值税的房屋转让指出售 赠与
  • 机构改革后地方金融局怎么办
  • 交17000办的保险是什么保险
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设