Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 场景重新加载后不删除singleton游戏对象引用的有效方法_C#_Unity3d_Game Development - Fatal编程技术网

C# 场景重新加载后不删除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

我有一个singleton类,每次我重新加载场景时,我存储在变量中的对象引用都会被销毁

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
,会发生什么情况?