《炉石传说》架构设计赏析(2):Scene管理

欢迎来的我的酒馆,快来火炉旁暖暖你的靴子。哈哈,我们继续欣赏炉石的代码。欢迎转载,请注明作者【燕良@游戏开发】及原文地址:http://blog.csdn.net/neil3d/article/details/39231541

上篇文章我们分析到SceneMgr处理了Scene的加载工作,今天我们主要分析一下炉石这款游戏中一共有哪些Scene,他们各自负责什么,以及它内部的逻辑、UI的处理方式。

在正式开始之前,我来对前文中提到的Scene切换再做一些补充分析。前文中我们看到SceneMgr是调用了“ Application.LoadLevelAdditiveAsync(this.sceneName);”,那内存中的东西岂不是越搞越多吗?我们再仔细看一下SceneMgr:SwitchMode()函数,它是一个Coroutine,他主要进行了下面这几个步骤的操作:

  1. 调用当前Scene的Scene:PreUnload()函数;
    发送FireScenePreUnloadEvent事件;
    等待直到Unload过程走完(通过检测LoadingScreen的阶段);
  2. 调用Scene:Unload()函数;
    发送FireScenePreUnloadEvent事件;
    调用成员函数PostUnloadCleanup()函数,它调用了两个关键的函数:
    • 首先是成员函数:DestroyAllObjectsOnModeSwitch(),这个函数查找到所有的GameObject(Object.FindObjectsOfType(typeof(GameObject))),然后进行了筛选(通过成员函数ShouldDestroyOnModeSwitch),除了一些全局对象之外(主要是SceneMgr、PegUI、Box、DefLoader),全都删除了(通过调用Object.DestroyImmediate())。
    • 然后调用了&#x
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值