我将要发布游戏,但我遇到了一个疯狂的怪异错误,我没能找到原因 因此我每次在游戏中拿到钻石后,我的游戏中就有钻石了,他拥有的钻石数增加了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;
答案 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
中将其清除。