访问另一个场景中的变量
Posted
技术标签:
【中文标题】访问另一个场景中的变量【英文标题】:Accessing a variable in another scene 【发布时间】:2014-01-12 06:02:53 【问题描述】:是否可以统一更改另一个场景中的变量。我现在有一个脚本,让用户选择 5 个英雄,这 5 个英雄被保存到一个数组中,但是为了让游戏按照我想要的方式运行,该数组将在另一个场景中,我不确定如何将五个英雄的数据保存到另一个场景中的数组中。我可以在一个场景中完成所有操作,但两个场景会更有效率。这是我的代码:
using UnityEngine;
using System.Collections;
public class HeroChooser : MonoBehaviour
public static GameObject Archer;
GameObject Berserker;
GameObject Rouge;
GameObject Warrior;
GameObject Mage;
GameObject MainCamera;
public int counter = 0;
public bool archerOn = false;
public bool berserkerOn = false;
public bool rougeOn = false;
public bool mageOn = false;
public bool warriorOn = false;
// Use this for initialization
void Start ()
// Update is called once per frame
void Update ()
void OnGUI()
if(archerOn == false)
if (GUI.Button (new Rect(50,0,50,50), "Archer"))
Archer = GameObject.Find("Archer");
MainCamera = GameObject.Find("Main Camera");
HeroArraySaver heroArraySaver = MainCamera.GetComponent<HeroArraySaver>();
heroArraySaver.array[counter] = Archer;
archerOn = true;
counter++;
它的意思是:静态成员HeroArraySaver.array
不能用实例引用访问,用类型名称限定它而不是我不知道如何修复它。
【问题讨论】:
【参考方案1】:一种简单的方法是创建一个空的 GameObject 并将脚本/MonoBehaviour 附加到保存数据的对象上。要让它持续存在,您必须在该游戏对象上调用DontDestroyOnLoad()。这将确保您的游戏对象在移动到不同的场景时会四处游荡。
比如:
GameObject myPersistentDataObject = new GameObject("myPersistentDataObject");
MyDataClass data_class = myPersistentDataObject.AddComponent<MyDataClass>();
//set your data to whatever you need to maintain
在你的 MyDataClass 中你会做类似的事情
void Awake()
DontDestroyOnLoad(transform.gameObject);
然后在您的另一个场景中,您可以简单地再次找到您的游戏对象并从附加组件中检索其数据。
【讨论】:
感谢您的回复,使用此感谢!但是我将如何访问和更改另一个场景中的变量? 只需找到您的游戏对象(可能按名称)并使用 GetComponent 检索您的数据组件。然后,您可以根据需要对其进行修改。【参考方案2】:假设您有英雄的整数 ID,只需将它们存储在静态变量中:
public class GlobalData
public static int[] heroIds;
可以从任何场景访问静态变量,并且只要您的游戏运行,它就会一直存在。同样的技术适用于字符串或枚举。
【讨论】:
感谢您的回复!我将数组更改为静态数组,但发现在我的另一个赋予数组变量值统一的脚本中说:静态成员 `HeroArraySaver.array' 不能通过实例引用访问,而是用类型名称限定它 您没有显示HeroArraySaver
类的代码,并且在您发布的代码中,您使用小写h
编写了heroArraySaver.array
,而不是HeroArraySaver.array
。你应该使用后者。另请注意,如果您将GameObject
s 存储在该数组中,您还必须像其他答案中所述那样调用DontDestroyOnLoad
。以上是关于访问另一个场景中的变量的主要内容,如果未能解决你的问题,请参考以下文章