int值+ 1的问题给出了意外的值

时间:2019-12-02 13:52:38

标签: c# unity3d

我将要发布游戏,但我遇到了一个疯狂的怪异错误,我没能找到原因 因此我每次在游戏中拿到钻石后,我的游戏中就有钻石了,他拥有的钻石数增加了1。但是由于某种原因,随机增加了2或3! 这是我的代码:(使用unity 2017)

public class Diamond : MonoBehaviour {
    private LevelManager theLevelManager;
    public GameObject DiamondUI;

    // Use this for initialization
    void Start () {
        theLevelManager = FindObjectOfType<LevelManager>();
        DiamondUI.SetActive (false);
    }

    // Update is called once per frame
    void Update () {

    }

    void OnTriggerEnter2D (Collider2D other)
    {
        if (other.tag == "Player") {
            theLevelManager.AddDiamond ();
                        DiamondUI.SetActive (true);
            gameObject.SetActive (false);


        }
    }
}

这是级别管理器脚本中代码的一部分:

    public void AddDiamond ()
    {
        diamondCount += 1;
        DiamonText.text = "" + diamondCount;

    }

当然,在游戏开始时,我把diamondCount = 0;

2 个答案:

答案 0 :(得分:3)

更新每秒运行数十次。这意味着在实际删除菱形之前,碰撞功能可以运行多次。最简单的方法是为钻石等级赋予属性isCollected。第一次碰撞时将其设置为true,如果碰撞已经为true,则忽略碰撞。

void OnTriggerEnter2D (Collider2D other)
{
    if (other.tag == "Player" && !isCollected) {
        isCollected = true;
        theLevelManager.AddDiamond ();
        DiamondUI.SetActive (true);
        gameObject.SetActive (false);
    }
}

答案 1 :(得分:1)

如果幸运的话,您可以说玩家获得了额外的钻石。

否则,this article可能会有所帮助。

TLDR:某些对撞机会多次射击。他们建议您在isColliding中设置一个标记,例如OnTriggerEnter2D,并在Update中将其清除。