位置: 编程技术 - 正文

《炉石传说》架构设计赏析(2):Scene管理(炉石传说架是什么意思)

编辑:rootadmin
转自: Application.LoadLevelAdditiveAsync(this.sceneName);”,那内存中的东西岂不是越搞越多吗?我们再仔细看一下SceneMgr:SwitchMode()函数,它是一个Coroutine,他主要进行了下面这几个步骤的操作:

调用当前Scene的Scene:PreUnload()函数;发送FireScenePreUnloadEvent事件;等待直到Unload过程走完(通过检测LoadingScreen的阶段);调用Scene:Unload()函数;发送FireScenePreUnloadEvent事件;调用成员函数PostUnloadCleanup()函数,它调用了两个关键的函数:首先是成员函数:DestroyAllObjectsOnModeSwitch(),这个函数查找到所有的GameObject(Object.FindObjectsOfType(typeof(GameObject))),然后进行了筛选(通过成员函数ShouldDestroyOnModeSwitch),除了一些全局对象之外(主要是SceneMgr、PegUI、Box、DefLoader),全都删除了(通过调用Object.DestroyImmediate())。然后调用了:Resources.UnloadUnusedAssets();然后是调用前文提到过的成员函数:LoadModeFromModeSwitch(),进行了LoadLevelAdditiveAsync()操作;综上所述,炉石的Scene切换主要是包含两步:1删除所有非全局对象,卸载未引用的Asset;2加载新的Scene。(我倒是想到另外一个土鳖一点的替代方案:创建一个完全空的scene,调用LoadLevel加载它,那么所有没有设置"DontDestroyOnLoad"的对象就都被删除了。)除了前文提到的Login,我们可以看到Scene还有很多派生类,详见下图:这是我猜测的这些类和游戏内容的对应关系,没有太仔细分析,可能有些对应是错误的:下面我们就挑选一个简单的Scene来分析一下它的内部运作机制,我们来看一下AdventureScene吧。Adventure相关的Class很多,我们只做一个粗略的分析,只涉及到下面这几个类和接口:首先我推测,在Hub屏幕中点击中间的【Solo Adventure】(冒险模式)按钮之后,通过我们前文分析的LoadScene流程,加载了一个冒险模式相关的Scene。它里面有一个GameObject绑定了“AdventureScene”这个脚本,我们可以看到AdventureScene:Awake()方法中主要是注册了很多事件的回调。我们可以看到有一个“AdventrueSubScenes”枚举,它基本上对应了下图中的按钮:[csharp] view plaincopypublic enum AdventureSubScenes { Chooser, Practice, MissionDeckPicker, NormalHeroic, ClassChallenge }

推荐整理分享《炉石传说》架构设计赏析(2):Scene管理(炉石传说架是什么意思),希望有所帮助,仅作参考,欢迎阅读内容。

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

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

《炉石传说》架构设计赏析(2):Scene管理(炉石传说架是什么意思)

我们看到有“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点学的小东西,加在一起还蛮欢乐的!

Unity3D - 资源管理 转载Unity3D-资源管理--夜风_一直没有总结过Unity的资源管理,都是随用随看文档。今天有人问,竟然没说上来,说起来也做了两款Unity游戏,惭愧。这里

unity的网络通信 (一)unitynetwork初步最新消息:在月2日的开发者大会上,我问了一下unity的人,会不会对网络层进行封装和改进,unity的人表示,最晚5.0,最快4.x版本

[置顶] unity3d中加密保存本地存档 unity中提供了PlayerPrefs来存储和读取本地的存档,根据unity的文档显示,很容易就能找到这些信息存储的位置而且是明文的,很容易就看懂了也可以修改,如何

标签: 炉石传说架是什么意思

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

上一篇:unity3d android工程加入最新的有米广告(android studio unity3d)

下一篇:Unity3D - 资源管理(unity资源文件)

  • 发放上年年终奖个税
  • 增值税相关政策
  • 发债评级机构 有哪些
  • 贴现率和折现率一样吗
  • 利息收入为什么不能在贷方
  • 现金流是资产吗
  • 售后回购的增值税税率
  • 企业借个人款该交税吗
  • 企业计提预提费用的会计分录如何编制?
  • 退回剩余工程物资计入什么科目
  • 发放短期外汇贷款的意义
  • 异地设立分公司可以独立核算吗
  • 办事处可以办理临时身份证吗
  • 提供物业管理服务税率
  • 开具红字专票的步骤
  • 一般空调安装费多少钱
  • 普通发票和增值税专用发票有什么异同
  • 月息和年息的换算公式等额本息
  • 公司公章丢失登报后又找到了
  • 公司开一般户弊端
  • 借主营业务成本贷库存商品
  • 小规模纳税人发生销售退回如何申报
  • 合同签订后税率调整
  • 劳务报酬怎么申报个税电子税务
  • 收到服务费分录怎么写
  • 超市消费券买什么好
  • 交易性金融资产公允价值变动怎么算
  • 固定资产和固定资金的区别
  • php ftp函数
  • 产品工人工资会扣税吗
  • mac osx10.11
  • 建筑企业安装费计入什么科目
  • 盘盈的存货处理
  • php上传图片大小限制
  • php错误级别有哪些
  • 一般纳税人销售旧货适用征收率是?
  • “write javaBean error, fastjson version 1.2.83, class org.apache.shiro.web.servlet.ShiroHttpServletR
  • Smarty实现页面静态化(生成HTML)的方法
  • 工会经费计提分录怎么写
  • 华为od测试岗机试需要怎么准备
  • php读取文件内容
  • 持续经营利润是什么意思
  • 财政补助结转会计处理
  • 事业结余期末余额在借方
  • 一般纳税人进项大于销项账务处理
  • 工资和五险一金在公司发,个税在子公司扣
  • 盈余公积企业所得税税率
  • 燃气费计入什么科目
  • 累计折旧的账务处理
  • 只有进项税月末要转入未交增值税么
  • 个人所得税手续费返还账务处理
  • 营业利润净利润利润总额的区别
  • 评估增值净利润调减
  • 福利用什么表示
  • 发放奖金怎么做账
  • 医保卡收到钱
  • 退货与销售折让的区别
  • 计时工资和计件工资的含义
  • 收到红字进项发票先勾选再做转出吗
  • 盈余公积根据什么确定
  • 农业生态有限公司成立条件
  • 辅助生产成本如何结转
  • sql语句优化之用是什么
  • sqlserver性能优化5种方式
  • Win7系统如何关闭自动更新
  • 如何关闭京东白条
  • Linux服务器管理的开机界面
  • 晨枫U盘启动工具哪个版本好用
  • linux虚拟机网络设置
  • qbdagent2002.exe - qbdagent2002是什么进程 有什么用
  • rhel7配置ip地址
  • windows7怎么禁用网络
  • 系统时间错乱如何使用NTP进行系统时间调整
  • Default style sheet for HTML 4
  • shell命令读取文件并新增另一文件到指定行
  • angularjs1.5
  • python数据类型详细介绍
  • 安卓手势控制app
  • 国家税务总局咨询热线电话
  • 许昌市民之家有餐厅吗在几楼
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设