我有一颗子弹,当它击中目标时,分数应该增加 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 --> 在场景中查找引用。它将向您显示附加了此脚本的每个游戏对象。将其从除子弹游戏对象之外的所有对象中删除。
2。游戏对象上有多个碰撞器。也许是小时候的对撞机。你必须找到一种方法来处理这个问题。如果是这种情况,您可以通过将子碰撞器放在单独的标记中并进行检查来忽略它们。
您已经在检查标签,这很好。只需将子碰撞器的标签更改为非“Score”的其他内容,即可 other.gameObject.CompareTag("Score")
不会true
.
关于c# - 本应增加 1 的分数却增加了 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43455365/