C# 分数没有增加

C# 分数没有增加,c#,android,unity3d,C#,Android,Unity3d,我创建了一个简单的游戏,玩家与敌人碰撞,分数将增加1。如何正确地做 下面是我的代码: public class Bird : MonoBehaviour { public GameObject deathparticales; public Vector2 velocity = new Vector2(-2, 0); public float range = 5; public int score; private string scoreText;

我创建了一个简单的游戏,玩家与敌人碰撞,分数将增加1。如何正确地做

下面是我的代码:

public class Bird : MonoBehaviour {
    public GameObject deathparticales;
    public Vector2 velocity = new Vector2(-2, 0);
    public float range = 5;
    public int score;
    private string scoreText;

    // Use this for initialization
    void Start()
    {
        score = 0;
        rigidbody2D.velocity = velocity;
        transform.position = new Vector3(transform.position.x, transform.position.y - range * Random.value, transform.position.z);
    }

    // Update is called once per frame
    void Update () { 
        // Die by being off screen
        Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
        if (screenPosition.x < -10)
        {
            Die();
        }
        scoreText = "Score: " + score.ToString();
    }

    void OnGUI () 
    {
        GUI.color = Color.black;
        GUILayout.Label(scoreText);
    }

    // Die by collision
    void OnCollisionEnter2D(Collision2D death)
    {
        if(death.transform.tag == "Playercollision")
        {
            score++;
            Destroy(gameObject);
            Instantiate(deathparticales,transform.position,Quaternion.identity);
        }
    }

    void Die()
    {
        Application.LoadLevel(Application.loadedLevel);
    }
}
公共类鸟类:单一行为{
公共游戏对象死亡粒子;
公共向量2速度=新向量2(-2,0);
公众浮动范围=5;
公众智力得分;
私有字符串文本;
//用于初始化
void Start()
{
得分=0;
刚体2d.速度=速度;
transform.position=新矢量3(transform.position.x,transform.position.y-范围*Random.value,transform.position.z);
}
//每帧调用一次更新
无效更新(){
//在银幕之外死去
Vector2屏幕位置=Camera.main.WorldToScreenPoint(transform.position);
如果(屏幕位置.x<-10)
{
模具();
}
scoreText=“Score:+Score.ToString();
}
void OnGUI()
{
GUI.color=color.black;
GUILayout.Label(scoreText);
}
//撞死
无效OnCollisionInter2D(碰撞2D死亡)
{
if(death.transform.tag==“Playercollision”)
{
分数++;
摧毁(游戏对象);
实例化(死亡粒子、变换、位置、四元数、标识);
}
}
空模()
{
Application.LoadLevel(Application.loadedLevel);
}
}

如果所有代码都来自同一个脚本,问题是您正在增加Bird类的一个实例的分数,然后杀死该实例:

score++;
Destroy(gameObject);
gameObject
指的是这个Bird类实例所附加到的游戏对象

Score变量只是公共的,这意味着Bird的每个实例都有自己的,但您可以从其他脚本访问该变量。如果您只想让所有鸟类共享一个分数变量,您可以将该变量设置为静态变量

但是,如果您有多个bird,所有这些bird都将调用OnGUI函数并将值绘制到屏幕上。所以最好改变你的设计,把分数转移到其他游戏对象上。

问题 你试图更新那些
鸟中每个人的得分


解决方案 您需要一个只用于处理分数的类

public class ScoreManager : MonoBehaviour
{
    private int score = 0;
    private static ScoreManager instance;

    void Awake()
    {
        instance = this;
    }

    public void incrementScore(int amount)
    {
        score += amount;
    }

    public static ScoreManager getInstance()
    {
        return instance;
    }

    void OnGUI () 
    {
       string scoreText = "Score: " + score.ToString();

       GUI.color = Color.black;
       GUILayout.Label(scoreText);
    }
}
然后,每次您想要更新分数时,都要从另一个类调用
ScoreManager
,如下所示:

ScoreManager.getInstance().incrementScore(10);

使用调试器。当您希望调用我时,请确保调用了
Update()
方法。确保使用新值
scoreText
的代码(您没有在此处发布)在执行
Update()
方法后实际执行。如果您仍然无法理解,请编写一个好的代码示例并更新此问题或发布一个新问题:无法理解如何操作请帮助我如果您无法理解如何使用调试器,那么SO可能不是您获得帮助的最佳论坛。在这里的答案对您有意义之前,您至少需要对如何使用可用的工具集(如VisualStudio)有一个良好的理解。