c# - C#中MakeSingleTon和MakeInstance有什么区别
问题描述
MakeSingleTon:
void Awake()
{
MakeSingleTon();
}
void MakeSingleTon()
{
if(instance != null)
{
Destroy(gameObject);
}
else
{
instance = this;
DontDestroyOnLoad(gameObject);
}
}
制作实例:
void Awake()
{
MakeInstance();
}
void OnDisable()
{
instance = null;
}
void MakeInstance()
{
if (instance == null)
{
instance = this;
}
}
我刚刚学会了 C# 编码,我不知道和之间有什么区别MakeInstance
,MakeSingleTon
我认为它们是一样的,因为对于我的一些实验,它们具有相同的功能......
那么,它们之间有什么区别或者它们是一样的呢?
解决方案
您可以像这样重写您的“单例”代码:
if(instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
将代码更改为看起来与您的单实例代码相似,您现在可以看到两者都有效地做同样的事情。唯一的区别是如果已经存在另一个实例,Singleton 会自动销毁自己。
通常,Singleton 用于只应创建一次并应在游戏的整个生命周期中持续存在的逻辑。如果创建了另一个实例,它应该立即销毁自己以避免争用。“得分经理”之类的东西就是一个很好的例子。IE 如果场景发生变化并且新场景尝试创建新的乐谱管理器,您不希望您的乐谱重置。
除非您经常更改场景并且需要在多个场景中保留您的实例,否则我建议您只使用 Single Instance 而不是 Singleton。
您只能在层次结构中的根对象上调用 DontDestroyOnLoad,因此您只能在根对象上添加 Singleton 脚本。您可以使层次结构中的任何对象成为单个实例。
推荐阅读
- c# - 如何一直提示输入直到它有效?
- python - Plotly Express 3D 向量
- go - 使用系统调用在 Go 中的 Chroot 给出错误
- reactjs - 任何不在 React 组件中使用 Proptypes 的理由
- javascript - 提交表单时出错:无法使用 NodeJS + ExpressJS 发布
- javascript - 在 jquery 中调用 react this.function
- python - 如何访问 H2O for python 中的混淆矩阵元素?
- python - 傅里叶变换 傅里叶逆变换 python
- security - 使用自签名证书连接到后端的安全前端
- google-apps-script - Google 电子表格脚本(if 和复选框)