分数计数器不适用于Unity3D

时间:2016-06-21 19:47:26

标签: c# unity3d unityscript unity5

所以我正在编写一个足球横杆挑战游戏(这是我的第一个游戏),我在横梁上添加了一个脚本,如下所示:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class crossbarscript : MonoBehaviour {
public AudioSource ping;
public static int score;
public Rigidbody rb;
public Text text;

// Use this for initialization
void Start () {
    ping = GetComponent<AudioSource>();

    rb = GetComponent<Rigidbody>();
    score  = 0;


}

// Update is called once per frame
public void OnCollisionEnter (Collision col) {

    if(col.gameObject.name == "Ball")
    {

        text = GetComponent<Text>();
        text.text = "Score: " + score; //This is the line the error is pointing at

        ping.Play();
        rb.freezeRotation = true;
    }



}
}

在控制台中,我得到了这个: NullreferenceException:未将对象引用设置为对象的实例

我要做的是让每次球击中横杆(脚本附加的对象)时,它会添加到左上角文本的乐谱上。如果有办法解决这个问题,或者我应该采取另一种方式,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:3)

text = GetComponent<Text>();

是不必要的,并导致您的问题。您运行此脚本的GameObject不包含Text组件并且正在撤销null,这会导致text.text在下一行失败。

您不应该在碰撞代码中调用GetComponent<Text>()。您已经有了一个公共变量,它应该可以通过将Text对象拖到脚本上而在设计器中设置。设置后,您无需在代码中设置它。

请参阅Roll-A-Ball教程“3.3: Displaying the Score and Text”,了解如何在代码中使用Text来显示分数。