访问另一个场景中的变量

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。你应该使用后者。另请注意,如果您将GameObjects 存储在该数组中,您还必须像其他答案中所述那样调用DontDestroyOnLoad

以上是关于访问另一个场景中的变量的主要内容,如果未能解决你的问题,请参考以下文章

从 Unity 中的不同场景访问变量

从java中的另一个线程访问一个线程的变量

如何从 Swift SpriteKit 中的另一个 SKScene 访问变量

访问另一个项目中的 firebase 函数环境变量

如何访问另一个场景中存在的游戏对象[重复]

访问从另一个类调用的函数中的变量