首页 > 解决方案 > 在弹丸上行走,不会发生碰撞,但由于步距偏移,玩家会跳上它们

问题描述

标题说明了一切,弹丸只有在玩家静止不动时才会击中玩家并消失,如果他正在移动,玩家将“跳”在子弹头上并走过它们,不会触发碰撞而不做真的什么都有。

我试图实现的是子弹会穿过玩家,但如果它们确实与玩家发生碰撞,仍然会检测到碰撞,因此角色控制器永远不会在它们身上行走,或者它们应该在玩家获得之前与玩家发生碰撞有机会从他们身上走过。这个问题与角色控制器组件中的“Step Offset”功能有关,因为当我将它设置为 0.05 时,这个问题不会发生,但我不能这样做,因为我的角色需要能够上楼梯或走小壁架。

非常感谢!

void OnCollisionEnter(Collision other)
{
    if (other.gameObject.CompareTag("Player"))
    {
        scrCh = other.gameObject.GetComponent<scr_CharacterController>();
        calculatedDamage = Random.Range(minDamage, maxDamage);
        if (scrCh != null && scrCh.currentHealth > 0)
        {
            CancelInvoke("Remove");
            gameObject.SetActive(false);
            scrCh.TakeDamage(calculatedDamage);
            


            if (gameObject.CompareTag("Special Bullet"))
            {
                scrCh.TakeDamage(calculatedDamage * 3);
                gameObject.SetActive(false);
            }
        }
    }

    if (other.gameObject.CompareTag("Unbreakable"))
    {

        gameObject.SetActive(false);


    }
}

标签: c#unity3dcollisionlayerprojectile

解决方案


有两种方法可以解决此问题:

  1. 要么更改角色控制器碰撞框(它是一个圆柱体)的大小,使其大小小于角色网格碰撞器,这样子弹将与网格碰撞而不是与角色控制器发生碰撞。

  2. 或者您可以将角色控制器设置在不同的层上,一个不与子弹碰撞的层,结果是相同的,子弹现在只会与角色网格碰撞器发生碰撞。


推荐阅读