在其他场景C#上调用对象

Call object on other scene C#

我有这个问题,我想从我的第一个场景中调用一个对象,然后在我的第二个场景中调用该对象。我试过这样做

if (instance == null)
    instance = this;
else if (instance != this)
     Destroy(gameObject);

     DontDestroyOnLoad(gameObject);

然后把它放在我不想破坏的物体上然后在

上改变我的场景
void Start(){
   SceneManagement.LoadScene("Menu",LoadSceneMode.Single);
}

但它不在继承体系中

有人可以帮我吗

编辑:

现在加载下一个场景时

我要的东西不在了。正在销毁

创建持久对象

在这里创建一个预加载器场景,您可以放置​​启动画面或任何您喜欢的东西,但重要的是加载应该持久的东西(可能是网络或游戏管理器)

创建一个脚本PersistentObject.cs并将以下代码放入其中

private void Awake(){
  DontDestroyOnLoad(this.gameObject);
}

将此脚本放在您在预加载器中初始化的任何对象上

从任何地方访问对象

如果你想访问另一个场景中的对象,有几种方法,但我假设你没有对该对象的任何特定引用

因此,如果我们有一个 GameManager.cs 并且我们在我们的预加载器中创建了一个名为 Cube 的持久立方体,我们可以通过说 GameObject cube = GameObject.FindGameobjectWithName("Cube");

来获取对游戏对象的引用

现在您可以使用 cube

做任何您想做的事

少写,多做单例

创建单例也非常有用

public static class Singleton<T>: MonoBehavior where T: MonoBehavior{
  private static T instance;

  //Notice the lower and upper case difference here
  public static T Instance{
    get{
      if(instance == null){
        instance = GameObject.FindGameObjectOfType<T>();
      }
      return instance;
    }
  }
}

然后您可以将其添加到您的脚本中,使访问属性更容易并减少您必须编写的代码量

public class Cube: Singleton<Cube>{
  private string cubeName = "Jeff";

  public void ChangeCubeName(string newName){
    cubeName = newName;
  }
}

要访问此 class 的此方法,您现在可以从代码中的任何位置调用单例

例子

public class GameManager: MonoBehavior{
  private void Start(){
    cube.Instance.ChangeCubeName("Joe");
  }
}