- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unity3D学习之游戏启动流程
前些天看新闻,unity?Awards两项大奖颁给了暴雪的《炉石传说》,这真是对Unity一个再好不过的宣传了——你看,暴雪都开始用Unity了。大家都知道,目前Unity发布的游戏大多都没有对程序集进行混淆、加密,所以作为一个炉石的玩家Unity的初学者,自然不能错过这个机会。让我们好好看一下暴雪的代码吧。 炉石传说的游戏内容的非常丰富多彩,所以我花了一些时间分析了其程序集,将一些设计思路记录下来,与大家分析。 做这些分析的主要目的是:
看看炉石如何组织游戏逻辑,以支撑复杂的技能逻辑、表现等;
看看炉石是如何使用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 ,哦~,这应该是游戏启动的时候显示
文档评论(0)