Unity3D中物体绕垂直于鼠标划过方向的轴的旋转
2013-09-05 23:12
246 查看
本篇文章和上篇文章相似都是做物体的运动,难点在于怎样找到物体旋转所要绕的是哪个方向上的轴。
比如鼠标横着划过,那么物体应该绕的是竖直方向上的轴;如果鼠标从左上划向右下,那么物体绕的就应该是从右上到左下方向上的轴。
总结一下即是物体旋转绕轴方向应该是垂直于鼠标划动方向,重点就是求出这个方向。
同样需要声明两个变量来储存鼠标移动时在屏幕上X方向Y方向的偏移量
float yRotation = 0f;
float xRotation = 0f;
由于需要实现物体随时间慢慢停下来的效果所以需要再声明一个变量储存鼠标划动的距离
float mouseDistance;
需要计算方向,声明两个三维向量,一个储存鼠标划动的方向,一个储存旋转绕轴的方向
Vector3 mouseDirection = Vector3.zero;
Vector3 rotationDirection = Vector3.zero;
然后在鼠标左键按下去的时候开始记录位移偏移量
yRotation = Input.GetAxis("Mouse Y");
xRotation = Input.GetAxis("Mouse X");
并且以此计算出鼠标划动的方向,因为是基于平面的(Z轴为0)所以记录鼠标划动方向的三维向量应该是
mouseDirection = new Vector3(xRotation, yRotation, 0);
那么鼠标划动的距离就可以这样计算出来
mouseDistance = Vector3.Magnitude(mouseDirection)*10;//该函数用于求三维向量的大小
重点来了,其实数学学的好的话,可以很明了的明白如何求出该方向向量,在这里我们用到了空间向量的叉乘,即通过表示鼠标划动方向的三维向量叉乘垂直于屏幕方向的三维向量,得出一条垂直于两者的三位向量
rotationDirection = Vector3.Cross(mouseDirection, Vector3.forward);
//该函数用于求三维向量的叉乘
当鼠标左键松开之后物体开始旋转并且越转越慢最后停止。这个效果通过使上边得到的鼠标划动的距离慢慢减小实现
mouseDistance = Mathf.Clamp(mouseDistance-=0.1f, 0, Mathf.Infinity);//该数学函数表示的意思可以上圣典查,大致就是限制第一个参数处于第二个和第三个之间
一切计算妥当之后,最后的旋转实现如下
transform.Rotate(rotationDirection, mouseDistance, Space.World);
OK!脚本写好,建一个cube,附上脚本,运行Unity,按着鼠标左键划动鼠标松开之后就可以实现所要效果啦~
比如鼠标横着划过,那么物体应该绕的是竖直方向上的轴;如果鼠标从左上划向右下,那么物体绕的就应该是从右上到左下方向上的轴。
总结一下即是物体旋转绕轴方向应该是垂直于鼠标划动方向,重点就是求出这个方向。
同样需要声明两个变量来储存鼠标移动时在屏幕上X方向Y方向的偏移量
float yRotation = 0f;
float xRotation = 0f;
由于需要实现物体随时间慢慢停下来的效果所以需要再声明一个变量储存鼠标划动的距离
float mouseDistance;
需要计算方向,声明两个三维向量,一个储存鼠标划动的方向,一个储存旋转绕轴的方向
Vector3 mouseDirection = Vector3.zero;
Vector3 rotationDirection = Vector3.zero;
然后在鼠标左键按下去的时候开始记录位移偏移量
yRotation = Input.GetAxis("Mouse Y");
xRotation = Input.GetAxis("Mouse X");
并且以此计算出鼠标划动的方向,因为是基于平面的(Z轴为0)所以记录鼠标划动方向的三维向量应该是
mouseDirection = new Vector3(xRotation, yRotation, 0);
那么鼠标划动的距离就可以这样计算出来
mouseDistance = Vector3.Magnitude(mouseDirection)*10;//该函数用于求三维向量的大小
重点来了,其实数学学的好的话,可以很明了的明白如何求出该方向向量,在这里我们用到了空间向量的叉乘,即通过表示鼠标划动方向的三维向量叉乘垂直于屏幕方向的三维向量,得出一条垂直于两者的三位向量
rotationDirection = Vector3.Cross(mouseDirection, Vector3.forward);
//该函数用于求三维向量的叉乘
当鼠标左键松开之后物体开始旋转并且越转越慢最后停止。这个效果通过使上边得到的鼠标划动的距离慢慢减小实现
mouseDistance = Mathf.Clamp(mouseDistance-=0.1f, 0, Mathf.Infinity);//该数学函数表示的意思可以上圣典查,大致就是限制第一个参数处于第二个和第三个之间
一切计算妥当之后,最后的旋转实现如下
transform.Rotate(rotationDirection, mouseDistance, Space.World);
OK!脚本写好,建一个cube,附上脚本,运行Unity,按着鼠标左键划动鼠标松开之后就可以实现所要效果啦~
相关文章推荐
- Unity3D 物体跟随鼠标旋转
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- Unity3D中鼠标旋转物体
- unity3d游戏物体跟着鼠标方向移动
- Unity3d中使用鼠标控制物体的平移旋转缩放
- Unity3d鼠标拖拽控制物体720°旋转
- Unity3D之物体跟随鼠标移动和旋转
- unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
- unity3d游戏物体跟着鼠标方向移动
- unity3d游戏物体跟着鼠标方向移动
- unity3d游戏物体跟着鼠标方向移动
- Unity3D 鼠标拖动和旋转物体以及鼠标拖动图片
- Unity3d通过鼠标缩放查看和旋转物体
- 2D画面中使物体跟随鼠标的方向旋转(向量法)
- Unity3d通过鼠标缩放查看和旋转物体
- Unity3D控制物体前后左右移动、旋转及相机跟随
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
- Unity3d控制物体的旋转以及缩放
- Unity3D 鼠标拖动3维物体与系统自带拖动刚体物体
- [unity3d]鼠标拖动and旋转缩放