在初次使用Character Controller 时发现当人物跳跃后在桥上或上桥的斜坡上时候,总是会无缘无故的穿过去
开始寻找时候,以为是Character Controller 的参数Radius半径范围太小了,导致自带的isGrounded方法并没有判断正确得落地,导致我一直控制人物下落问题。更改了参数后,跑了很长一段时间并没有再次出现,以为没有问题了。但隔天无意测试时候,发现并没有好。
然后推测是Character Controller的某个属性,填写错误,大了或者小了为此我查看了网上的文档或官方文档,发现并没有什么问题,我就以为是我把Character Controller 和Collider 挂在同一物体下导致的一些问题,当我分离他们两个之后发现并不是这个问题。
因为我并没有使用Character Controller 的碰撞接收OnControllerColliderHit 函数,而使用的Box Collider的OnTriggerEnters和OnTriggerExits 来判定一些碰撞问题,所以我就在测试,当我穿过模型斜坡时,OnControllerColliderHit函数有没有执行,测试发现并没有执行这个函数,也就是说,当我人物和斜坡进行碰撞后,并没有触发碰撞事件。
感觉是这个问题,继续测试,写了一个固定弧度的方法,来判定,当Character Controller和斜坡接触时,是否会触发碰撞事件。
我测试发现,当人物的Character Controller刚好落到斜坡的碰撞上,会触发OnControllerColliderHit,但是,当人物下落位移过大,导致人物正好卡成这样时 ,就会导致并没有触发OnControllerColliderHit,此时的isGrounded为false ,这个原因导致逻辑判定还在落地就一直让人物向下位移。
然后换了个射线检测的方法来判定是否接触地面
bool IsGroundeds()
{
return Physics.Raycast(player.transform.position, Vector3.down, 0.1f);
}
请各位大佬指导,这个穿过去之后没有触发OnControllerColliderHit ,并且isGrounded为false是为什么?我终究没有找到原因,但换了另一种解决方式。
网友评论