我有一个问题,我想从第一个场景调用一个对象,然后在第二个场景中调用该对象。我尝试这样做
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 来获取对游戏对象的引用立方体 = 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;
}
}
要访问此类的方法,您现在可以从代码中的任何位置调用单例
示例
public class GameManager: MonoBehavior{
private void Start(){
cube.Instance.ChangeCubeName("Joe");
}
}
关于c# - 调用其他场景上的对象 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55691977/