[Unity教程] 摄像头碰撞穿模问题的解决办法

2019-04-13 11:55发布

[Unity教程] 摄像头碰撞穿模问题的解决办法
  1. 起因: 在TPS中, 摄像头很容易进入到墙面之中, 也就是TPS相机的穿模问题, 如图
    在这里插入图片描述
    在这里插入图片描述
  2. 我给的解决办法是, 用SphereCast检查碰撞, 会得到碰撞点, 相机之间移动到碰撞点不就好了吗
  3. 有人会不知道 Physics里面 Cast 和 Overlap 的区别, 我简单提一下
    用Cast : 主要是为了得到碰撞信息RaycastHit, 里面有碰撞点, 和碰撞法向量
    Overlap: 则是为了得到碰撞Collider, 也就是得到当前接触的物体
    各有优点吧
  4. 不用Raycast 和 Linecast, 当角度较小的时候, 难以检测碰撞, 这可不是单单加大长度的问题, 而SpereCast就很棒, 圆形的可以在角度小的情况下碰到墙面
    红线就是Raycast, 角度太小, 没检查到 红线就是Raycast, 角度太小, 没检查到
    在这里插入图片描述
  5. 代码如下, 放到相机移动脚本的最后面
    半径最好是0.2f啊
if (Physics.SphereCast(玩家.Position, .2f, -玩家.forward, out hitInfo, 相机与玩家距离, LayerMask.GetMask("Wall"))) { transform.position = new Vector3(hitInfo.point.x + hitInfo.normal.x * currentPushDistance, transform.position.y, hitInfo.point.z + hitInfo.normal.z * currentPushDistance); } else { transform.position = 玩家.position - 玩家.forward * 相机与玩家距离; }
  1. 效果如图所示, 自动拉进, 自动拉出
    在这里插入图片描述