unity旋转向量
2016-11-25 19:58
351 查看
PS:Unity3d 鼠标的事件
GetMouseButtonDown()
当鼠标按键按下时,返回一次true,后面参数0是左键,1是右键,2是中键
GetMouseButton()
当鼠标按键按下时,返回true,可能多次,根据你鼠标按下的时间 ,后面参数0是左键,1是右键,2是中键
其实就是鼠标按下,一直触发这个消息
GetMouseButtonUp()
当鼠标按键按下后弹起时,返回一次true,后面参数0是左键,1是右键,2是中键
PS 2:Vector3.Cross(vector3,vector3) 向量的叉乘,得到两个向量的垂直向量
下面一个简单的旋转操作
核心代码:
offset = Input.mousePosition - previousPosition;
Debug.Log(offset);
previousPosition = Input.mousePosition;
transform.Rotate(Vector3.Cross(offset, Vector3.forward).normalized, offset.magnitude, Space.World); 正方向(z轴),鼠标偏移的方向,这两个方向所在平面的法向量
下面是围绕y轴转:
int m = offset.x > 0 ? -1 : 1; 根据鼠标按下的位置偏移,决定y轴方向
transform.Rotate(new Vector3(0,m,0), offset.magnitude, Space.World);
void Update()
{
按下记录位置
if (Input.GetMouseButtonDown(0))
{
StartPosition = Input.mousePosition;
previousPosition = Input.mousePosition;
}
按住实时旋转
if (Input.GetMouseButton(0))
{
offset = Input.mousePosition - previousPosition;
Debug.Log(offset);
previousPosition = Input.mousePosition;
transform.Rotate(Vector3.Cross(offset, Vector3.forward).normalized, offset.magnitude, Space.World);
//int m = offset.x > 0 ? -1 : 1;
//transform.Rotate(new Vector3(0,m,0), offset.magnitude, Space.World);
}
松开继续旋转
if (Input.GetMouseButtonUp(0))
{
finalOffset = Input.mousePosition - StartPosition;
isSlide = true;
angle = finalOffset.magnitude;
}
if (isSlide)
{
transform.Rotate(Vector3.Cross(finalOffset, Vector3.forward).normalized, angle * 2 * Time.deltaTime, Space.World);
if (angle > 0)
{
angle -= 15;
}
else
{
angle = 0;
}
}
代码如下:
using UnityEngine; using System.Collections; public class DragRotation : MonoBehaviour { // Use this for initialization Vector3 prepos; Vector3 endpos; void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { prepos = Input.mousePosition; //初始化(d点初始化) endpos = prepos; } // (更新点) if (Input.GetMouseButton(0)) { Vector3 pos = endpos - prepos; prepos = endpos;//前面(prepos)的后移(endpos), Debug.Log(endpos + " " + pos); endpos = Input.mousePosition;// 后面的后移 重新获取 //= prepos = endpos; transform.Rotate(Vector3.Cross(pos, Vector3.forward), pos.magnitude, Space.World); } } }
相关文章推荐
- Unity中绕任意轴任意角度旋转向量
- unity入门教程之使用四元数旋转向量
- unity 利用四元数旋转向量时出错 解决方法
- Unity 向量围绕一个轴旋转 求新向量
- unity-----------------------四元数与欧拉旋转方法
- unity旋转相关
- 旋转向量
- Unity 球体旋转 到固定位置
- 使用unity绘制旋转的三角形
- MFC_箭头画法之向量旋转
- SGU 120 Archipelago (向量旋转)
- 向量旋转算法
- poj 2556 Edge 向量旋转
- Eigen库使用教程之旋转矩阵,旋转向量和四元数的初始化和相互转换的实现
- 【小松教你手游开发】【unity实用技能】unity3d 陀螺仪控制camera移动旋转
- 旋转矩阵和旋转向量
- Eigen库:旋转矩阵,旋转向量和四元数的初始化和相互转换
- poj 2957 计算几何向量的旋转
- Unity 控制物体绕自身的x,y,z 轴旋转,transform.Rotate()
- unity 第一人称视角脚本(旋转)