分数计数器不适用于 Unity3D
Score counter not working on Unity3D
所以我正在编写一个足球横梁挑战游戏(这是我有史以来的第一个游戏),我向横梁添加了一个脚本,如下所示:
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:对象引用未设置到对象的实例
我想要做的是,每次球击中横梁(脚本附加到的对象)时,它都会添加到左上角文本的分数中。请让我知道是否有办法解决这个问题,或者我是否应该用其他方法解决,谢谢。
行
text = GetComponent<Text>();
是不必要的,并且导致了您的问题。您 运行 此脚本所在的 GameObject 不包含 Text
组件并且正在重新调整 null,这导致 text.text
在下一行失败。
您不需要在碰撞代码中调用 GetComponent<Text>()
。您已经有一个 public 变量,它可能已经通过将 Text
对象拖到脚本上而在设计器中进行了设置。一旦在那里设置,你就不需要在你的代码中设置它。
请参阅 Roll-A-Ball 教程“3.3: Displaying the Score and Text”,了解应如何在代码中使用 Text
来显示分数的示例。
所以我正在编写一个足球横梁挑战游戏(这是我有史以来的第一个游戏),我向横梁添加了一个脚本,如下所示:
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:对象引用未设置到对象的实例
我想要做的是,每次球击中横梁(脚本附加到的对象)时,它都会添加到左上角文本的分数中。请让我知道是否有办法解决这个问题,或者我是否应该用其他方法解决,谢谢。
行
text = GetComponent<Text>();
是不必要的,并且导致了您的问题。您 运行 此脚本所在的 GameObject 不包含 Text
组件并且正在重新调整 null,这导致 text.text
在下一行失败。
您不需要在碰撞代码中调用 GetComponent<Text>()
。您已经有一个 public 变量,它可能已经通过将 Text
对象拖到脚本上而在设计器中进行了设置。一旦在那里设置,你就不需要在你的代码中设置它。
请参阅 Roll-A-Ball 教程“3.3: Displaying the Score and Text”,了解应如何在代码中使用 Text
来显示分数的示例。