Unity 中 DontDestroyOnLoad() 方法

探讨Unity中DontDestroyOnLoad方法的常见误区与解决方案,避免场景切换时同一脚本实例重复加载的问题,确保游戏运行稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往往不怎么清楚unity 这个方法的具体含义的时候,很容易犯一些令人苦笑不得的错误。比如,有一个物体挂载着一个脚本,里面执行了一句 DontDestroyOnLoad(this)。乍看之下没任何问题。但是如果考虑下如下的情形,你是不是也曾经头疼过?比如:有多个场景之间来回切换,你会发现,你的这个挂载的脚本的物体越来越多。

    其实,unity的官方API里说的很明确,加载下一个场景的时候,其他的资源都会被清掉,但挂载了这个脚本的物体会留在下一个场景中。这样造成的问题是,场景里有多个该脚本的实例,导致 bug 出现。

                       

解决方法:

1> 从文档里看,既然在切换场景的时候才会触发这个逻辑,那么一种解决方案就是,将这个带有 DontDestroyOnLoad(this)的这个物体放在游戏中有且只有一次加载机会的场景里,比如进入游戏的 Loading 场景,这样,不管以后场景怎么切换,都不会涉及到这句代码的重复执行。

2>既然是重复,那么可以在代码里确保该实例的唯一性,单例就是这样实现的。这样一来,你可以将这个脚本放在你的游戏的任何一个场景里,任它们怎么切换,每当重新生成了一个新的该脚本的实例的时候,都会判断 Instance是否为空,只有第一次才是空,才执行一次 DontDestroyOnLoad(this),以后的每次调用,都会将该实例 Desttroy 掉。

                                 

    所以,你现在明白了这个方法的真是含义,并怎样灵活的使用它了吗?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值