C# 在场景之间更改变量

C# 在场景之间更改变量,c#,unity3d,C#,Unity3d,我有一个场景,我写下我的球员统计数据。在下一个场景中(基本上在接下来的两个场景中,但这并不重要),我想购买一些武器并更改变量 问题是我正在用“DontDestroyOnLoad”保存对象,当我转到下一个场景时,我想知道如何更改变量 第一场: 守则: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class statsText

我有一个场景,我写下我的球员统计数据。在下一个场景中(基本上在接下来的两个场景中,但这并不重要),我想购买一些武器并更改变量

问题是我正在用“DontDestroyOnLoad”保存对象,当我转到下一个场景时,我想知道如何更改变量

第一场:

守则:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class statsTextsToDisplayAndChanges : MonoBehaviour
{
    public static statsTextsToDisplayAndChanges _INstance;
    buyWeapons bw;
    public Text m_LevelText;
    public Text m_AttackText;
    public Text m_DefendText;
    public Text m_MoneyText;
    public int level = 0;
    public int money = 500;
    public int health = 400;
    public int attack = 10;
    public int def = 5;
    string answer;
    string url = "http://alex3685.dx.am/display.php";


    public int sword1 = 200;


    public void Start()
    {

        _INstance = this;
        DontDestroyOnLoad(this.gameObject);

        display();

    }

    public void display()
    {


        m_LevelText.text = level.ToString();
        m_AttackText.text = attack.ToString();
        m_DefendText.text = def.ToString();
        m_MoneyText.text = money.ToString();
    }

    public void onPurchase()
    {
        if (money >= sword1)
        {
            Debug.Log("YOU BOUGHT IT");
            money -= sword1;
            //Destroy(GameObject.Find("playerStats"));
            display();
        }
    }

}
第二场:

当我按下按钮时,购买功能中的debug.log起作用,但文本中没有任何变化(从500枚硬币到200枚剑币=300枚硬币)

有什么想法吗


提前感谢。

嗯……初步想法:

这是一个你想要一个真正的管理者对象的时候,它附带一张纸条,只知道如何存储相关的统计数据

然后,在处理购买的任何脚本中,他们都有一个私有的GameObject,它引用了manager对象。
private GameObject\u manager

但是该对象存在于我的编辑器中的另一个场景中,因此我无法拖放引用

没问题, 假设包含存储统计信息的组件的对象称为
“PlayerManager”
。在start()方法中处理购买的脚本中添加:
\u Manager=gameobject.Find(“PlayerManager”)

现在,您可以将所有变量更改为您心中的内容,当然,假设您已将管理器中的变量设置为公共变量,或者如果您更高级,更关心健壮的代码,那么您有适当的get;设置方法到位


希望这有帮助

Hmmm….最初的想法:

这是一个你想要一个真正的管理者对象的时候,它附带一张纸条,只知道如何存储相关的统计数据

然后,在处理购买的任何脚本中,他们都有一个私有的GameObject,它引用了manager对象。
private GameObject\u manager

但是该对象存在于我的编辑器中的另一个场景中,因此我无法拖放引用

没问题, 假设包含存储统计信息的组件的对象称为
“PlayerManager”
。在start()方法中处理购买的脚本中添加:
\u Manager=gameobject.Find(“PlayerManager”)

现在,您可以将所有变量更改为您心中的内容,当然,假设您已将管理器中的变量设置为公共变量,或者如果您更高级,更关心健壮的代码,那么您有适当的get;设置方法到位


希望这有帮助

使用
PlayerPrefs
保存和检索数据


来源:

使用
PlayerPrefs
保存和检索数据


资料来源:

请展示您迄今为止的研究/调试工作。请先阅读第页。请展示您迄今为止的研究/调试工作。请先看这一页。哇,这很有帮助!现在,当我按下“购买”键时,我可以看到统计数据发生了变化!现在我还有一个问题。当我回到第一个场景(图1)时,统计数据会回到我之前的统计数据,我在第一个场景中有500个硬币,在第二个场景中,当我购买武器时,我有300个硬币。当我回到第一个场景时,我仍然有500个硬币。有什么想法吗?哦,对不起,我的错。它不起作用。它起作用了,因为我不小心复制了第二个场景中的“playerstats”对象。当我删除它时,它不起作用。这就是为什么你不使用场景。您需要让Manager脚本检测实例何时已经存在,如果已经存在,则销毁它自己。返回到早期场景的问题是,它的行为仍然像是第一次加载一样。AKA,原始的statObject将包含所有的引用和脚本。因此,可能在一开始就有一个初始化场景,您永远不会返回到该场景,只需继续使用dontDestroyOnload()。如果你想去摧毁另一个管理者,你也需要一种方法来告诉谁是最老的顺便说一句。因此,你还应该跟踪管理者对象从一个场景移动到另一个场景的次数。另一位反对者建议使用payer Preff,但这些Preff的存储方式使它们易于从外部资源(黑客)进行编辑,因此,这取决于你的游戏范围,你是否应该使用它取决于。如果你不关心玩家是否可以更改值,那么使用playerPrefs。哇,这很有帮助!现在,当我按下“购买”键时,我可以看到统计数据发生了变化!现在我还有一个问题。当我回到第一个场景(图1)时,统计数据会回到我之前的统计数据,我在第一个场景中有500个硬币,在第二个场景中,当我购买武器时,我有300个硬币。当我回到第一个场景时,我仍然有500个硬币。有什么想法吗?哦,对不起,我的错。它不起作用。它起作用了,因为我不小心复制了第二个场景中的“playerstats”对象。当我删除它时,它不起作用。这就是为什么你不使用场景。您需要让Manager脚本检测实例何时已经存在,如果已经存在,则销毁它自己。返回到早期场景的问题是,它的行为仍然像是第一次加载一样。AKA,原始的statObject将包含所有的引用和脚本。因此,可能在一开始就有一个初始化场景,您永远不会返回到该场景,只需继续使用dontDestroyOnload()。如果你想去摧毁另一个管理者,你也需要一种方法来告诉谁是最老的顺便说一句。因此,你还应该跟踪管理者对象从一个场景移动到另一个场景的次数。另一位反对者建议使用payer Preff,但这些Preff的存储方式使它们易于从外部资源(黑客)进行编辑,因此,这取决于你的游戏范围,你是否应该使用它取决于。如果您不关心玩家是否可以更改值,请使用playerPrefs。