访问另一个场景中的变量

时间:2014-01-12 06:02:53

标签: arrays unity3d

是否可以统一更改另一个场景中的变量。我现在有一个脚本,用户选择5个英雄,这5个英雄被保存到一个数组,但为了让游戏运行我想要的方式,那个数组将在另一个场景中,我不知道如何将五个英雄数据保存到另一个场景中的数组。我可以在一个场景中完成所有操作,但是2个场景会更有效。这是我的代码:

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无法使用实例引用进行访问,使用类型名称对其进行限定,而不确定如何修复它。

2 个答案:

答案 0 :(得分:3)

一种简单的方法是创建一个空的GameObject并将脚本/ MonoBehavi附加到保存数据的脚本/ MonoBehaviour。为了使其持久化,您必须在该GameObject上调用DontDestroyOnLoad()。这将确保您的GameObject在移动到不同的场景时会挂起。

类似于:

GameObject myPersistentDataObject = new GameObject("myPersistentDataObject");
MyDataClass data_class = myPersistentDataObject.AddComponent<MyDataClass>();
//set your data to whatever you need to maintain

在你的MyDataClass的Awake中,你会做类似

的事情
void Awake()
{
    DontDestroyOnLoad(transform.gameObject);
}

然后在您的其他场景中,您可以再次找到您的GameObject并从附加组件中检索其数据。

答案 1 :(得分:0)

假设你有英雄的整数ID,只需将它们存储在一个静态变量中:

public class GlobalData {
    public static int[] heroIds;
}

静态变量可以从任何场景访问,并且只要游戏运行就会持续存在。相同的技术适用于字符串或枚举。