[Unity教程] 摄像头碰撞穿模问题的解决办法
2019-04-13 11:55发布
生成海报
[Unity教程] 摄像头碰撞穿模问题的解决办法
- 起因: 在TPS中, 摄像头很容易进入到墙面之中, 也就是TPS相机的穿模问题, 如图
- 我给的解决办法是, 用SphereCast检查碰撞, 会得到碰撞点, 相机之间移动到碰撞点不就好了吗
- 有人会不知道 Physics里面 Cast 和 Overlap 的区别, 我简单提一下
用Cast : 主要是为了得到碰撞信息RaycastHit, 里面有碰撞点, 和碰撞法向量
Overlap: 则是为了得到碰撞Collider, 也就是得到当前接触的物体
各有优点吧
- 不用Raycast 和 Linecast, 当角度较小的时候, 难以检测碰撞, 这可不是单单加大长度的问题, 而SpereCast就很棒, 圆形的可以在角度小的情况下碰到墙面
红线就是Raycast, 角度太小, 没检查到 红线就是Raycast, 角度太小, 没检查到
- 代码如下, 放到相机移动脚本的最后面
半径最好是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 * 相机与玩家距离;
}
- 效果如图所示, 自动拉进, 自动拉出
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮