Unity3D 永久对象DontDestroyOnLoad ()

默认状态下,Unity 假设各个对象处于自闭合的时间和场景空间内。场景间的差别类似于各个独立的天体间的差别。最终结果可描述为,对象无法在所属的场景之外存在;同时,当活动场景变化时,对象也将不复存在。由于场景间彼此不同且相互独立,因而这体现了对象的一般行为方式。 即使如此,某些对象依然需要被保留,并会在不同场景间被教入,例如玩家角色、 积分榜系统或者GameManager类。这一类高优先级对象, 其存在不应受到特定场景的限制,并可跨越多个场景。通过DontDestroyOnLoad 函数,用户可生成持久性对象,其中包含了某些较为重要的结果。
代码如下:
DontDestroyOnLoad (gameObject) ;

场景间的对象持久性十分重要,对象将持有之这一特性并在不同场景间运动。这也意味着,子对象中也继承了这一类持久性对象,及其所采用的数据和资源,例如网格、纹理以及声音等。据此,持久性对象可采用轻量级方式构建,例如不包含子对象的空游戏对象,其中仅涉及了可保证正常工作的基本组件,以使场景变化过程中仅保留某些必要、重要的数据。

当改变Unity中的活动场景时,可使用Application. LoadLevel函数。该函数包含了不同的版本,例如LoadLevelAsync、LoadLevelAdditive以及LoadLevelAditiveAsynC。

如前所述,DontDestroyOnLoad函数在活动场景中现有对象上被调用,并防止场景变化时对象被销毁。此时,将会产生与对象复制相关的问题。特别地,如果随后重新载入或者返回至持久对象所处的原场景时,将产生对象的持久特性复制。也就是说,源自上一个场景的原持久性特征,以及针对新创建场景实例的最新对象实例。当然,当每次重新进入场景时,问题还会被再次放大一每次均会产生新的复制, 这并非是期望结果。通常情况下,用户仅需要一个对象实例:一名玩家、一个游戏管理器以及一个积分榜。对此,用户需要创建单例对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值