问题描述
标题说明了一切,如果玩家站着不动,射弹只会击中玩家并消失,如果玩家在移动,玩家将“跳”到子弹上方并从它们上方走过,不会触发碰撞并没有真正做任何事情。
我想要实现的是子弹会穿过玩家,但如果它们确实与玩家发生碰撞,仍然会检测到碰撞,这样角色控制器就永远不会在它们上面行走,或者它们应该在碰撞之前与玩家发生碰撞玩家有机会走过他们。这个问题与角色控制器组件中的“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);
}
}
解决方法
有两种方法可以解决此问题:
-
要么改变 Character Controller Collision Box(它是一个圆柱体)的大小,使它的大小小于你的 Character Mesh Collider,这样子弹将与 Mesh 碰撞而不是与 Character Controller 碰撞。
-
或者您可以将角色控制器设置在不同的图层上,该图层不与子弹碰撞,结果是子弹现在只会与角色网格碰撞器碰撞。