Unity相机旋转和人物朝向

最近在做一个自己想做的东西,里面涉及到摄像机的旋转,人物朝着摄像机旋转后的方向行走等等,还要固定摄像机和人物的相对距离不变,并跟随人物移动。

首先需要定义一个Vecto3 relCameraPos,在Start方法中为它赋初值,这就是摄像机和人物的相对朝向吧应该。。。向量的加减法吧,包含朝向和大小

relCameraPos = cameraObject.transform.position - transform.position; //相对朝向和大小的向量
再在输入中定义一个摄像机旋转的输入。

因为摄像机移动的时候人物也需要跟着移动(这个脚本是在人物身上的),而且摄像机需要根据输入绕着人物旋转,并且还需要更新相对距离。

float cam_h = Input.GetAxis("CamRotate"); //摄像机旋转与否
                                          //先更新摄像机的位置和转动,在更新这两个的距离 改朝向
cam_transform.position = relCameraPos + transform.position;
cam_transform.RotateAround(transform.position, Vector3.up, cam_h);
relCameraPos = cameraObject.transform.position - transform.position;
这顺序不能出错,要不得不到想要的结果


然后就是人物的朝向了,因为摄像机是绕着Y轴旋转的,然后人物的朝向在有输入的时候需要朝着摄像机的forward为自身的forward,所以首先获得输入,然后将输入旋转,就是应该的朝向

 /*****获得当前方向输入*****/
 float h = Input.GetAxis("Horizontal");
 float v = Input.GetAxis("Vertical");
 velocity = new Vector3(h, 0, v);

 //利用四元数左乘向量来得到目标应该的朝向
 float cam_y = cam_transform.rotation.eulerAngles.y;
 velocity = Quaternion.Euler(0, cam_y, 0) * velocity;


还有一个是鼠标控制旋转摄像机(也是绕着物体旋转),不过竖直方向旋转有一个限制,两边都不超过80度

/******摄像机视角******/
//获得水平和竖直的鼠标旋转
float cam_h = Input.GetAxis("MouseHorizontal");                                                          
float cam_v = Input.GetAxis("MouseVertical");

cam_transform.position = relCameraPos + transform.position;
//视角旋转
//水平旋转
cam_transform.RotateAround(transform.position, Vector3.up, cam_h * 0.5f);
//竖直旋转 ,两边旋转不超过80度
float angleX = cam_transform.rotation.eulerAngles.x;
float nextAngleX = cam_v*0.5f + angleX;
if (nextAngleX >= 360f)
{
    nextAngleX -= 360f;
}
if ((nextAngleX < 80f) || (nextAngleX <= 360f && nextAngleX >= 280f) )
	cam_transform.RotateAround(transform.position, cam_transform.right, cam_v * 0.5f);
         
relCameraPos = cameraObject.transform.position - transform.position;

基本就是键盘 或者鼠标控制视角旋转的脚本吧




  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值