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

问题描述

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

我想要实现的是子弹会穿过玩家,但如果它们确实与玩家发生碰撞,仍然会检测到碰撞,这样角色控制器就永远不会在它们上面行走,或者它们应该在碰撞之前与玩家发生碰撞玩家有机会走过他们。这个问题与角色控制器组件中的“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. 要么改变 Character Controller Collision Box(它是一个圆柱体)的大小,使它的大小小于你的 Character Mesh Collider,这样子弹将与 Mesh 碰撞而不是与 Character Controller 碰撞。

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