【发布时间】:2021-09-17 18:09:07
【问题描述】:
我正在使用 Unity 制作游戏,并且在设置检测近战碰撞的方法时遇到了很多麻烦。 在研究了其他人提出的每一个关于这个问题的建议后,似乎没有一个有效,而且应该很容易实现的东西被证明是非常困难的。 主要问题是冲突不会一直记录在案。
我使用OnTriggerEnter 方法进行碰撞检测,但这始终无法检测到所有碰撞。连同我尝试过的所有其他方法,包括使用碰撞检测的每种组合进行物理碰撞。
然后我将其更改为 OnTriggerStay 方法,它检测到 100% 或接近 100% 的冲突,尽管我对解决方法不满意,因为我认为 OnTriggerEnter 不工作的逻辑原因没有。
然而,这两种方法都存在另一个问题。也就是说,在同一次武器攻击期间,经常会多次触发碰撞。 所以如果我向敌人挥剑,它会在同一挥舞中触发两次,并对敌人造成两次伤害。
我的碰撞码是
private void OnTriggerStay(Collider other)
{
if (canDamage == true)
{
float damage = wielder.GetComponent<BaseStats>().GetStat(Stat.Damage);
other.gameObject.GetComponent<Health>().TakeDamage(wielder, damage);
}
}
任何人都可以提出一种方法来添加到此代码中,以便接受第一次碰撞,但随后任何进一步的碰撞(在武器的特定挥动期间)都不会。
另外,请记住,在此游戏中,单次武器挥动可能会击中多个敌人。所以它需要允许击中敌人 1,然后阻止敌人 1 受到进一步的伤害,但仍然允许敌人 2 或敌人 3 等接触到他们时受到伤害的可能性。
或者,对于一般碰撞系统的任何反馈以及更好的替代方案的建议将不胜感激:)
【问题讨论】:
-
您是否以任何方式改变了项目的物理特性?
-
当我第一次寻找答案时,有人建议使用不同的物理设置,我尝试过但没有成功,所以我把它改回来了……至少我认为我做到了。如果我没记错的话,这是当前设置为持久联系人歧管的“联系人生成”