在其他场景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");
}
}
我有这个问题,我想从我的第一个场景中调用一个对象,然后在我的第二个场景中调用该对象。我试过这样做
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");
}
}