Unity 单例

记录找了一天的bug:The object of type ‘GameObject’ has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.

unity 切换场景的时候总是报错,说是某个类在尝试调用已经销毁的某个东西。
错误原因:在设置这个类单例的时候顺手加了个DontDestroyOnLoad(this);
(摔)
第一次用单例,顺便记一下:unity切换场景时所有前场景的东西都会销毁掉,设置dontdestroy,可以把前一个场景的这个物体弄进下一个场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Unity中,实现模式的方式与其他编程语言中基本相同。以下是一个简子: ```c# public class Singleton : MonoBehaviour { private static Singleton instance; private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); } else { instance = this; DontDestroyOnLoad(gameObject); } } public static Singleton Instance { get { return instance; } } } ``` 在这个子中,我们使用了一个静态变量`instance`来存储对象。在`Awake`方法中,我们检查是否已经存在对象,如果存在则销毁当前对象,否则将当前对象赋值给`instance`并且使用`DontDestroyOnLoad`方法使其在场景切换时不被销毁。同时,我们通过一个静态属性`Instance`来获取对象。 在需要使用对象的地方,我们可以直接使用`Singleton.Instance`来获取该对象。 ### 回答2: Unity模式是一种设计模式,用于确保一个类只有一个实,并提供一个全局访问点以便在整个项目中使用。 在Unity中,我们经常需要在不同的脚本之间共享数据或者控制某个对象的行为,这时候就可以使用模式。使用模式可以保证只有一个实存在,并且可以通过静态方法或属性来访问该实。 在实现Unity模式时,通常会使用一个私有的静态字段来存储该实,并提供一个公共的静态属性或方法来获取该实。在获取实时,首先判断该实是否已经存在,如果已经存在则直接返回该实,否则创建一个新实并返回。这样就可以确保只有一个实存在,并且可以在需要的地方方便地使用。 如,我们可以创建一个GameManager类,并使用模式来确保只有一个GameManager实存在。代码示: ```csharp public class GameManager : MonoBehaviour { private static GameManager instance; private void Awake() { if (instance != null) { Destroy(gameObject); } else { instance = this; DontDestroyOnLoad(gameObject); } } public static GameManager Instance { get { return instance; } } // 其他方法和属性 } ``` 在上述代码中,通过Awake方法来判断实是否存在,如果存在则销毁当前实,否则将当前实赋值给静态的instance字段,并使用DontDestroyOnLoad方法来保证在场景切换时不被销毁。通过Instance属性可以在其他脚本中方便地访问GameManager实。 使用Unity模式可以方便地管理和访问全局的对象和数据,但需要注意的是,过度使用模式可能会导致代码的耦合性增加,降低代码的可读性和可维护性,因此在使用时需要权衡利弊。 ### 回答3: Unity中的模式是一种常用的设计模式,用于确保某个类在游戏运行过程中只能被实化一次。 在Unity中,我们通常会把一些需要在多个脚本中共享数据和功能的类设计为。这样可以保证在整个游戏中只有一个实存在,并且其他脚本可以方便地访问这个实。 实现模式需要以下步骤: 1. 首先,我们需要在该类中定义一个私有的静态变量,用来保存类的唯一实。这个变量的类型应该是类本身。 2. 接下来,我们定义一个公有的静态方法,用来获取该类的实。在这个方法中,我们需要判断该类的实是否已经存在,如果不存在就创建一个新的实,并将其保存到上面定义的变量中。如果已经存在,则直接返回该实。 3. 最后,我们需要将该类的构造函数标记为私有,以防止在其他地方创建该类的实。 实现模式后,其他脚本只需要通过调用该类的公有静态方法即可获取到类的实,然后就可以使用这个实提供的功能和数据了。这样可以避免在游戏中重复创建实,节省内存开销。 总之,Unity模式是一种非常有用的设计模式,能够确保在游戏中某个类只能被实化一次,并且可以方便地在其他脚本中访问这个实

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值