【问题标题】:Problem with colliders in Unity (melee RPG)Unity 中的碰撞器问题(近战 RPG)
【发布时间】: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 等接触到他们时受到伤害的可能性。

或者,对于一般碰撞系统的任何反馈以及更好的替代方案的建议将不胜感激:)

【问题讨论】:

  • 您是否以任何方式改变了项目的物理特性?
  • 当我第一次寻找答案时,有人建议使用不同的物理设置,我尝试过但没有成功,所以我把它改回来了……至少我认为我做到了。如果我没记错的话,这是当前设置为持久联系人歧管的“联系人生成”

标签: c# unity3d collision


【解决方案1】:

我建议如下:

  1. 确保您的对撞机尺寸不是很小。 Unity 物理引擎不适用于小型对撞机。如有必要,最好扩大一切。玩它。

  2. 将刚体的collisionDetectionMode 更改为CollisionDetectionMode.ContinuousDynamic,用于快速移动的物体,如你的剑,以及其他需要碰撞的物体,如你的敌人,将其设置为CollisionDetectionMode.Continuous。如果这不起作用,请尝试不同的组合。它可能会影响性能。你可以阅读更多关于它的信息here

  3. 为了解决多次击中的问题,我只需创建一个在攻击期间进入我的剑触发器的游戏对象列表,在我伤害敌人之前,我会检查它是否已经在该列表中。如果它在名单上,不要受到伤害。如果没有受到伤害并将其添加到列表中。每次再次开始攻击或​​攻击结束时清除列表。

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多