我有一个场景,我写下我的球员统计数据。在下一个场景中(基本上在接下来的两个场景中但没关系)我想购买一些武器并改变变量。
问题是我用“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枚硬币)。
有什么想法吗?
提前致谢。
答案 0 :(得分:1)
嗯....首字母:
这是您希望附加脚本的真实经理对象只知道如何存储相关统计数据的时间之一。
然后,在处理购买的任何脚本中,他们都有一个私有GameObject,其中包含对经理对象的引用。private GameObject _Manager;
但是对象存在于我的编辑器中的另一个场景中,所以我不能拖放引用!
没问题,
让我们说具有存储统计信息的组件的对象称为"PlayerManager"
。在处理start()方法中的购买的脚本中添加:_Manager = gameobject.Find("PlayerManager");
现在您可以将所有变量更改为您的心灵内容,当然假设您已将管理器中的变量设置为公开,或者如果您更高级并且关注健壮的代码,则可以使用正确的get; set ;方法到位。
希望这有帮助!
答案 1 :(得分:1)
使用PlayerPrefs
保存和检索数据。
来源:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html