c# - 第一次更改文本有效,但之后我得到 NullReferenceException: Object reference not set to an instance of an object
问题描述
我正在统一开发一款游戏,我需要更改一些 UI 文本来显示玩家的钱。第一次在启动函数中更改它正常工作,但是当我尝试从不同的函数(在同一个类中)更改它时,它给了我以下错误:NullReferenceException:对象引用未设置为对象的实例
这是运行代码的类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class money : MonoBehaviour
{
public static money instance = new money();
private float Money = 100;
public Text MoneyText;
void Start()
{
setText();
}
public void setMoney (float mon)
{
Money += mon;
setText();
}
public float getMoney ()
{
return Money;
}
public void setText ()
{
MoneyText.text = Money.ToString();
}
}
这是导致错误的调用 setMoney 的代码:
money.instance.setMoney(-turretBuildCost);
我希望有人遇到同样的问题并且可以帮助我。
解决方案
所以你试图使用你创建的静态实例来更新你的 MoneyText,但是这个静态实例从来没有设置 MoneyText 属性,因为你设置 MoneyText 的唯一地方是你通过脚本附加到的 GameObject统一编辑器。
第一种方法,如果您想尝试保持单例模式,请执行以下操作:
public class money : MonoBehaviour
{
public static money instance = new money();
private float Money = 100;
public Text MoneyText;
void Start()
{
instance.MoneyText = MoneyText;
setText();
}
...
}
这将使用您已经设置的对象的属性设置 MoneyText 属性。
第二种方法是,如果您想避免使用单例模式,则必须从 GameObject 获取组件以获取实例以从中调用 SetMoney。
像这样:
YourGameObject.GetComponent<money>().setMoney(5.00);
推荐阅读
- apache-flink - jar 中两个路径中的 SimpleStringSchema 是否相同?
- python - pytest monkeypatch 无法修补 mongodb 集合
- python - 使用 Python 和 JSON 对 Yahoo 财务统计数据进行 Web 抓取
- javascript - 从另一个 ng-repeat 列表中过滤 ng-repeat 列表的元素
- r - R计数多少次`auto.arima()`确认`arima.sim()`为真
- python - 如何将嵌套的字典键作为类的属性返回?
- python - 如何在附加 xlrd 单元格值 Python 时使用 csv writerow
- java - 在 Object 中存储值并将其转换为 int
- asp.net - Sql查询后Asp.net Ajax没有返回
- python - 在 Excel 工作表中查找包含特定单词的行