分数没有增加

时间:2014-10-25 18:43:50

标签: 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;

    // 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 个答案:

答案 0 :(得分:2)

问题

您试图在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);

答案 1 :(得分:1)

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

score++;
Destroy(gameObject);

gameObject指的是附加了Bird类实例的游戏对象。

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

但是如果你有多只鸟,它们都会调用OnGUI函数并将值绘制到屏幕上。因此,最好更改设计并将分数移至其他游戏对象。