Unity 3D 中的计数器不会递减

Counter is not decremented in Unity 3D

基本上这个游戏是一款破砖游戏,我将在其中快速介绍一下它的基本背景。游戏会在随机位置生成 10 个砖块,如果所有砖块都碰到了砖块 一次,砖被摧毁。如果所有 10 块砖都被摧毁,那么用户将被带到另一个场景 (gamewon)。

我的主要问题是当我摧毁所有的砖块时,我没有被重定向到现场。但是,如果我将 numberOfBricks 设置为 1,它将起作用。我无法真正理解发生了什么。

非常感谢大家! -HurpaDurpa

using UnityEngine;
using System.Collections;

public class BrickScript : MonoBehaviour {
    public int position_x = 0;
    public int position_y = 0;

    public GameObject Brick;
    public int brickDamage = 0;
    public int numberOfBricks = 10;

    // Use this for initialization
    void Start () {

        Brick = GameObject.Find ("Brick");
        position_x = Random.Range (-6, 6);
        position_y = Random.Range(-1, 4);

        transform.position = new Vector3 (position_x, position_y, transform.position.z);
    }

    // Update is called once per frame
    void Update () {
        if (brickDamage == 1) { //destroy brick on 1 hit

            numberOfBricks--;
            Object.Destroy (gameObject); //so it will destroy the hit object
                }

        if (numberOfBricks == 0) {
                        Application.LoadLevel (1);
                        numberOfBricks = 10;//Variable resetted
                }

    }

    void OnCollisionEnter(Collision collision)
    {
        brickDamage++;
    }

}

发生这种情况是因为您似乎已将上面的脚本附加到每块砖上。

所以真正发生的是当你的任何一块砖被击中时,numberOfBricks 减少 1,导致值变为 9。每块砖都会发生这种情况。

相反,您需要做的是将此 numberOfBricks 计数器保存在另一个脚本中。在代码的 OnCollisionEnter 部分,您应该将另一个脚本中的 numberOfBricks 变量减 1。

这样做,您会看到预期的结果。