落地判断

在这个的基础上,阴影实现 - 准备工作:场景中行走的角色 - yanghui01 - 博客园 (cnblogs.com)

将地面判断换成下面的方式

 

使用单根射线

private bool CheckOnGround()
{
    var playerPos = this.transform.position;
    bool isHit = Physics.Raycast(playerPos, Vector3.down, out var hitInfo, 5);
    if (isHit)
        return hitInfo.distance <= m_characterCtrl.skinWidth;

    return false;
}

存在的问题,在平台边缘这种,往下投射的射线判断是腾空,但是包围在角色身上的胶囊还是与平台有接触不会下落。

 

 

在脚底位置使用球体碰撞判断

这个可以,目前没遇到啥问题

private bool CheckOnGround()
{
    var pos = this.transform.position;
    pos.y += m_characterCtrl.radius;
    pos.y -= m_characterCtrl.skinWidth;
    var isHit = Physics.CheckSphere(pos, m_characterCtrl.radius, 1 << LayerMask.NameToLayer("Ground"));
    Debug.DrawLine(pos, pos + Vector3.down * m_characterCtrl.radius, Color.red, 0.05f);
    return isHit;
}

 

参考

Unity 个人用过的地面检测方案总结 - zhxmdefj - 博客园 (cnblogs.com)

Unity中角色着地功能_terric的博客-CSDN博客

Unity进阶提升-2D游戏跳跃手感优化(跳起下落) - 清风扶云雾 - 博客园 (cnblogs.com)

CharacterController第一人称角色控制器_fps player-CSDN博客

Unity CharacterController控制人物移动(包括重力实现)_charactercontroller重力_三天又三天的博客-CSDN博客

 

posted @ 2023-10-30 23:17  yanghui01  阅读(3)  评论(0编辑  收藏  举报