c# - 本应增加 1 的分数却增加了 2

标签 c# unity-game-engine

我有一颗子弹,当它击中目标时,分数应该增加 1。但分数增加了 2。子弹是一个带有对撞机和刚体的胶囊,目标是带有对撞机和刚体的圆柱体

项目符号上的代码

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;
     }
 }
}

分数代码

public class Score : MonoBehaviour {

 public static int score;        // The player's score.

 Text text;                      // Reference to the Text component.

 void Start()
 {
     // Set up the reference.
     text = GetComponent<Text>();

     // Reset the score.
     score = 0;
 } 

 void Update()
 {
     // Set the displayed text to the score value.
     text.text = "Score: " + score;
 }
}

最佳答案

我之前已经解决过这个问题,但我搜索过它以将其标记为重复项,但找不到它。它可能已被OP删除。

您的分数可能会多次更新,有 2 个可能的原因。

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

修复:

A。检查 gameObject.AddComponent<Bullet>();不在项目中任何脚本中的任何位置。 AddComponent将为您的游戏对象添加新的子弹。

B.通过编辑器搜索游戏对象上的重复脚本。

选择您的Bullet脚本,转到 Assets --> 在场景中查找引用。它将向您显示附加了此脚本的每个游戏对象。将其从除子弹游戏对象之外的所有对象中删除。

enter image description here

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

您已经在检查标签,这很好。只需将子碰撞器的标签更改为非“Score”的其他内容,即可 other.gameObject.CompareTag("Score")不会true .

关于c# - 本应增加 1 的分数却增加了 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43455365/

相关文章:

c# - 如何保护手游的时效存档

C#在Unity游戏引擎中开箱后的倒计时

unity-game-engine - OnTriggerEnter 被调用但变量从未设置

c# - 如何使用 C# 的正则表达式匹配行的开头或结尾?

c# - 如何使用将使用相同构造函数的相同元素初始化引用类型列表?

c# - 当我设置 EnableSSL= false 时出现错误

c# - 一个 View 上的登录和注册表单 MVC3 Razor

android - 在 Unity 播放器设置中选择 Android 游戏的好处?

c# - 如何从演示文稿中删除计算

c# - 为什么相机没有旋转面向第一个航路点?