C# 场景重新加载后不删除singleton游戏对象引用的有效方法
我有一个singleton类,每次我重新加载场景时,我存储在变量中的对象引用都会被销毁C# 场景重新加载后不删除singleton游戏对象引用的有效方法,c#,unity3d,game-development,C#,Unity3d,Game Development,我有一个singleton类,每次我重新加载场景时,我存储在变量中的对象引用都会被销毁 public class GameManager : MonoBehaviour { private void Awake() { if (instance == null) { instance = this; } else { Destroy(t
public class GameManager : MonoBehaviour
{
private void Awake()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(this.gameObject);
}
DontDestroyOnLoad(this);
Debug.Log("Scene reloaded");
}
void Start()
{
shapeSpawnerGO = GameObject.Find("SpawnShapesObj");
scoreGO = GameObject.Find("ScoreText");
lifeGo = GameObject.Find("LifeText");
}
public bool RedShapeStatus(int rcv_RedShapeIndex)
{
if (shapeSpawnerGO == null)
{
shapeSpawnerGO = GameObject.Find("SpawnShapesObj");
}
return shapeSpawnerGO.GetComponent<ShapeSpawnerChild>().listofRedShape[rcv_RedShapeIndex].activeSelf;
}
}
公共类游戏管理器:单一行为
{
私人空间
{
if(实例==null)
{
实例=此;
}
其他的
{
摧毁(这个游戏对象);
}
DontDestroyOnLoad(此);
Log(“场景重新加载”);
}
void Start()
{
shapeSpawnerGO=GameObject.Find(“SpawnShapesObj”);
scoreGO=GameObject.Find(“ScoreText”);
lifeGo=GameObject.Find(“LifeText”);
}
公共图书馆红字索引(国际红字索引)
{
if(shapeSpawnerGO==null)
{
shapeSpawnerGO=GameObject.Find(“SpawnShapesObj”);
}
返回shapeSpawnerGO.GetComponent().listofRedShape[rcv_RedShapeIndex].activeSelf;
}
}
我所做的是检查shapeSpawnerGO是否为null,然后再次引用游戏对象。我认为这是没有效率的。还有其他办法解决这个问题吗 当然还有其他方法可以做到这一点,但我的官方回答是“你已经用一种可以接受的方式做到了。”你明确地说: “我所做的是检查shapeSpawnerGO是否为null,然后引用 还是游戏对象。我认为这不是很有效。有吗 还有别的办法解决这个问题吗?” 你说过你的代码唯一一次重新初始化变量是在场景重新加载的时候。操作时间根本不重要。你实际上是在说优化一些完全无关的东西。在重新加载期间重新初始化场景数据是正常场景加载的全部内容
唯一的例外情况是,如果场景重新加载的想法是每隔几秒钟进行一次。如果您谈论的是场景重新加载的正常想法,即加载一次游戏场景,然后在重新加载新场景之前继续运行游戏几分钟,那么就没有理由担心此代码会执行其正常的初始化行为。SpawnShapesObj是否在DontDestroy?如果没有,您需要再次实际查找。如果
实例==this
,会发生什么情况?