为什么我一直收到此NullReferenceException错误?

时间:2015-08-16 02:42:39

标签: c# unity3d

我的剧本......

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);
    }

}

}

2 个答案:

答案 0 :(得分:0)

GetComponent<TriggerZone>()

似乎正在返回null,您正试图从.score访问null。您的解决方案要么检查null的回报并采取适当的措施,要么确保呼叫永远不会返回null

答案 1 :(得分:0)

我感觉很愚蠢,但多亏Reddit我终于找到了问题。事实证明我将我的脚本附加到我的FPS控制器上,这导致了无效问题。