我的剧本......
using UnityEngine;
using System.Collections;
public class CountDownTimer : MonoBehaviour {
public int score;
float timeRemaining = 15;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
timeRemaining -= Time.deltaTime;
score = GetComponent<TriggerZone>().score;
}
void OnGUI(){
if (timeRemaining > 0) {
GUI.Label(new Rect(100, 100, 200, 100), "Time Remaining: "+(int)timeRemaining);
}
else{
GUI.Label(new Rect(100, 100, 200, 100), "Times up your score was: " + score + ". Press the r button to restart, or ESC to quit.");
if (Input.GetKeyDown("r"))
Application.LoadLevel("Testing Grounds");
if (Input.GetKey("escape"))
Application.Quit();
}
}
}
错误:
NullReferenceException:未将对象引用设置为的实例 对象CountDownTimer.Update()(at 资产/脚本/ CountDownTimer.cs:16)
我想不出可能导致此错误的原因。据我所知,它试图告诉我某些东西不存在,但我想不出那可能是什么。 “得分= GetComponent()。得分;”正在访问包含分数值的另一个脚本,以便在计时器用完时告诉玩家他们的分数,并为他们提供退出或重启游戏的选项。
此外,如果它有帮助,那么另一个脚本......
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TriggerZone:MonoBehaviour {
public Text MyText;
public int score;
// Use this for initialization
void Start () {
MyText.text = "";
}
// Update is called once per frame
void Update () {
MyText.text = "$" + score;
}
void OnTriggerEnter(Collider coll) {
if (coll.gameObject.HasTag ("ValueLevel1"))
score = score + 5;
if (coll.gameObject.HasTag ("ValueLevel2"))
score = score + 25;
if (coll.gameObject.HasTag ("ValueLevel3"))
score = score + 50;
if (coll.gameObject.HasTag ("ValueLevel4"))
score = score + 100;
if (coll.CompareTag ("Pickable")) {
coll.gameObject.SetActive(false);
}
}
}
答案 0 :(得分:0)
GetComponent<TriggerZone>()
似乎正在返回null
,您正试图从.score
访问null
。您的解决方案要么检查null
的回报并采取适当的措施,要么确保呼叫永远不会返回null
。
答案 1 :(得分:0)
我感觉很愚蠢,但多亏Reddit我终于找到了问题。事实证明我将我的脚本附加到我的FPS控制器上,这导致了无效问题。