分数没有增加

本文关键字:增加 | 更新日期: 2023-09-27 18:27:46

我创建了一个简单的游戏,玩家与敌人发生碰撞,分数会增加一分。如何正确操作?

以下是我的代码:

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

分数没有增加

问题

你试图更新Birds中每个人的分数。


解决方案

你需要一个唯一目的就是处理分数的班级。

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

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

score++;
Destroy(gameObject);

gameObject指的是Bird类的这个实例所附加到的游戏对象。

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

但如果您有多个bird,它们都将调用OnGUI函数并将值绘制到屏幕上。因此,改变你的设计并将分数移动到其他游戏对象可能是更好的主意。