我创建了一个空的游戏对象,我在其中创建了另一个空的游戏对象,在上面挂了一个 Collider 并附加了 Health 脚本,伤害通过了。如果我在主要对象上挂一个刚体,伤害不会过去。其实多少钱?
在调试中,脚本没有进入 OnTriggerEnter。
如果 Rigidbody 也使用 Collider 附加到子对象,则伤害会再次传递。
public int maxHealth = 100;
public int currentHealth = 100;
public HealthBar healthBar;
private void Start()
{
healthBar.SetMaxHealth(maxHealth);
}
private void OnTriggerEnter(Collider other)
{
Bullet bullet = other.gameObject.GetComponent<Bullet>();
if (bullet)
{
TakeDamage(20);
if (currentHealth == 0) Destroy(gameObject);
}
}
private void TakeDamage(int damege)
{
currentHealth -= damege;
healthBar.SetHealth(currentHealth);
}
通常,至少对问题进行一些可视化总比没有好:

我不明白刚体的玩笑是什么,但我通过挂起解决了这个问题,造成伤害的不是健康而是子弹,我制作了一个单独的脚本,内容如下:
在应该受到伤害的对象的 Collider 上,我挂起了 TakeDamage 类,以便在其上触发伤害。(一般来说,TakeDamage 可以被清空,但我把盔甲塞进去了)
一般来说,有更好的解决方案。问题的本质是 isTarget 没有挂在 Collider 上,如果我称量 isTarget,那么这个对象就会从 Plane 下掉下来。而且我知道这很愚蠢,但我不明白要调用 OnTriggerEnter,在与子弹交互的对象上需要 isTarget 复选框……总的来说,好的。
解决方法:用 Collider 创建两个对象,其中一个包含 isTarget 并在上面挂一个脚本,第二个不包含 isTarget,因为第二个 Collider 对象不会掉下来。