C# NullReferenceException,如何解决此问题
Unity表示在void update()中出现了问题 关于这可能是什么有什么想法吗 我在下面定义了所有变量,但Unity说某些对象引用没有设置为对象的实例C# NullReferenceException,如何解决此问题,c#,unity3d,C#,Unity3d,Unity表示在void update()中出现了问题 关于这可能是什么有什么想法吗 我在下面定义了所有变量,但Unity说某些对象引用没有设置为对象的实例 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GameStatus : MonoBehaviour { public Text PointsCount
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameStatus : MonoBehaviour
{
public Text PointsCounter;
public int FightPoints = 0;
public int FightDamage = 1;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
PointsCounter.text = "Points: " + FightPoints;
}
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
您从未创建
pointsconter
的实例,因此当您点击pointsconter.text=“Points:”+FightPoints代码>
实例化PointsCenter
:
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类游戏状态:单一行为
{
公共文本点中心;
公共int战斗点=0;
公共int战斗伤害=1;
//在第一帧更新之前调用Start
void Start()
{
PointsCenter=new Text();//可能有效,也可能无效;取决于UnityEngine.UI.Text是否有空构造函数;可能没有,如果没有,请参阅下面的说明
}
//每帧调用一次更新
无效更新()
{
pointsconter.text=“点:”+战斗点;
}
私人空间
{
DontDestroyOnLoad(游戏对象);
}
}
不过,考虑到您使用的是Unity,PointsCenter
可能需要使用编辑器进行分配。转到您的Unity层次结构,并确保具有此GameStatus
行为的GameObject
在UI中设置了PointsCenter
属性。使用new
操作符创建类型为UnityEngine.UI.Text
的新实例是一种不好的做法。@0xBFE1A8谢谢;我并不完全确定UnityEngine.UI的内部工作方式,但我有一种强烈的感觉,那就是它不是通过代码来实例化的。不过,考虑到您使用的是Unity,可能需要使用编辑器来指定PointsCenter。转到您的Unity层次结构,并确保具有此GameStatus行为的游戏对象在UI中设置了PointsCenter属性。您能澄清一下吗?@0xBFE1A8不仅是“坏习惯”,而且是绝对禁止!大多数Unity内置类类型都禁止使用new
关键字,只有少数例外;)UnityScript是为Unity创建的Javascript派生。C#是一种完全不同的语言。请决定您正在使用哪种语言(提示:它是C#,而不是UnityScript)。@John\u此外:UnityScript已被弃用。C#现在是唯一受Unity支持的语言(当然,本地插件除外)