走在射弹子弹上,没有碰撞但玩家由于步距偏移而跳上它们

Walking on projectiles bullets, not colliding but player jumps on them due to step offset

标题说明了一切,如果玩家站着不动,射弹只会击中玩家并消失,如果他在移动,玩家将''jump''站在子弹上面并从他们身上走过,没有触发碰撞,也没有真正做任何事情。

我想要实现的是,子弹会穿过玩家,但如果它们确实与玩家发生碰撞,仍会检测到碰撞,这样角色控制器就永远不会在它们上面行走,或者它们应该只与玩家发生碰撞在玩家有机会走过它们之前。这个问题与角色控制器组件中的“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);


    }
}

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

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

  2. 或者您可以将 Character Controller 设置在不同的 Layer 上,一个不与子弹碰撞的图层,结果是一样的,子弹现在只会与 Character Mesh Collider 碰撞。