大佬们自行略过
1.效果:碰到自定义比如地面或者障碍的时候,摄像头不会穿透到障碍物里面挡住视线
2.图形思路:
初始状态下 摄像机旋转和人物旋转为000,摄像机处于人物正后方,看向人物
圆心是人物
自定义摄像头处于人物正Z轴后面的距离就是红色圆的半径R
当鼠标上下mouse y移动时,相当于旋转人物Z朝向
利用人物Z朝向的反方向进行射线检测,如果碰到物体,获取到碰撞点坐标,将这个坐标设置为摄像机坐标
此时摄像机只是位置变了但是旋转(也就是摄像机面朝向)没有变(还是看的正前方),所以 人物坐标-当前摄像机坐标,得到一个方向向量,用四元数方法Quaternion.LookRotation(传入这个方向向量)赋值给摄像机旋转rotation,让摄像机看向此刻的人物
总体思路:摄像机没有碰撞点就正常沿着圆周移动,有碰撞点就获取碰撞点,让摄像机跟着碰撞点移动
优化:分别缓动摄像机的position和rotation 自定义缓动速度值speed暴露给面板。
延申:
1.上下旋转移动摄像机都解决了,左右旋转移动摄像机更简单,只需要在人物pos的x轴想象一个圆,按照类似的思路解决。
2.第三人称枪的开火路线应该就是摄像机的面朝向位置,也是人物body和head部位的IK看向的位置,只需要将摄像机面朝向往前寻找一个合适的点,让人物IK看向这个点,就可以做到抬头 低头等动作。
附上下旋转移动代码