Unity简单镜头旋转缩放

摘自:http://game.ceeger.com/forum/read.php?tid=2571&fid=2&page=2


以目标为中心旋转:
rotation_x += Input.GetAxis("Mouse X") * 速度平滑系数
rotation_y -= Input.GetAxis("Mouse Y") * 速度平滑系数
鼠标往下要作的是抬头动作,比较符合人类的认知习惯  所以 y是-= 与鼠标运动的反方向
transform.rotation = Quaternion.Euler(y,x, 0);
transform.position = transform.rotation * Vector3(0.0, 0.0, -distance) + target.position;
 Vector3(0.0, 0.0, -distance) :x y方向都是0,距离,因为要正对目标的效果,数学意义上就是在一个水平面和一个垂直面上,保持distance的距离,因为是从前往后看 所以distance是负的距离,否则就是用屁股看了
 
以自身为中心旋转(fps视角):
把最后一句去掉就over了 直接用鼠标输入重置镜头角度 注意z轴一般不需要转,不符合人类习惯了 很晕的,所以直接写死Euler(x,y,0)就行了,因为旋转镜头不需要参考目标 直接用:
transform.Rotate(y,x,0)也行,很方便 缺省就是绕自轴旋转
 
 
缩放:
一般不是通过调焦来实现 否则焦距老变物体畸变效果很丑的,调整镜头距离来实现
distance -= Input.GetAxis("Mouse ScrollWheel") * 速度平滑因子
往下滚是zoom out distance要增加 所以distance是-=
transform.position = transform.rotation * Vector3(0.0, 0.0, -distance) + target.position;
 其实只要是纯平移操作 都不需要理会目标的因素,直接用:
 
distance = -Input.GetAxis("Mouse ScrollWheel") * 速度平滑因子
transform.translate(0,0,-delta_distance);
就结束了
 
拖动:
数学的理解就是镜头角度不变,与原始目标的z方向距离不变,改变镜头的x y位移
position_x = -Input.GetAxis("Mouse X")*速度平滑因子;
position_y = -Input.GetAxis("Mouse Y") *速度平滑因子;
transform.position = transform.rotation * Vector3(position_x, position_y,0) + transform.position;
或者简单用法:
transform.Translate(positon_x,position,0);
 
这里距离写死为当前镜头z位移就行了,没他什么事 否则就不是平移了
 
都是2、3行代码的事。。。。
 
要用哪个键干啥 直接外面包上一个 if (Input.GetMouseButton(按键编号))判断就over了
 
其中绕目标为中心旋转镜头 需要参考目标的位置和镜头的旋转,相对概念上复杂一些,其他操作都可以无视目标 
 
 还有 镜头选择时鼠标x的位移影响镜头的y旋转,鼠标y影响x旋转,很好理解 镜头左右转是绕y轴旋转,上下转是绕x轴旋转 所以 x y要倒一倒


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值