是否可以统一更改另一个场景中的变量。我现在有一个脚本,用户选择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
无法使用实例引用进行访问,使用类型名称对其进行限定,而不确定如何修复它。
答案 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;
}
静态变量可以从任何场景访问,并且只要游戏运行就会持续存在。相同的技术适用于字符串或枚举。