当应该增加1时,分数增加2

时间:2017-04-17 16:27:16

标签: c# unity3d

我有一颗子弹,当它击中一个目标时,它应该将分数增加1.但是分数增加2.子弹是一个带有对撞机和rigibody的太空舱,目标是一个带有对撞机和rigibody的圆柱体

子弹上的代码

   $http({
      method: 'POST',
      url: '/contact-form.php',
      data: $.param($scope.formData),  //param method from jQuery
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }  //set the headers so angular passing info as form data (not request payload)
      })

得分代码

public class Bullet : MonoBehaviour {

 float lifespan = 2;

 void Start()
 {
     // destroy the bullet
     Destroy(gameObject, lifespan);
 }

 void OnTriggerEnter(Collider other)     //collider event
 {
     if (other.gameObject.CompareTag("Score"))      
     {
         Score.score = Score.score + 1;
     }
 }
}

1 个答案:

答案 0 :(得分:4)

之前我已经解决了这个确切的问题,但是我搜索它以将其标记为重复但无法找到它。它可能已被OP删除。

您的分数可能会多次更新有两种可能的原因。

1 。您的脚本(Bullet)多次附加到您的GameObject。这很可能是问题所在。它很可能附加到随机的空GameObject。

<强>修正:

A 。检查gameObject.AddComponent<Bullet>();是否在项目的任何脚本中都不存在。 AddComponent将为您的GameObject添加新的Bullet。

B 。通过编辑器在GameObjects上搜索重复的脚本。

选择您的Bullet脚本,转到资产 - &gt; 在场景中查找引用。它将向您显示附加了此脚本的每个GameObject。除了你的子弹GameObject之外,将它从所有这些中删除。

enter image description here

2 。您在GameObject上有多个对撞机。也许是小时候的对手。你必须找到一种方法来处理它。如果是这种情况,您可以通过将它们放在单独的标记中并检查它来忽略子对撞机。

您已经在检查标签了。只需将子对撞机的标签更改为其他不是&#34;得分&#34; 的标签,以便other.gameObject.CompareTag("Score")不会true