您的位置:首页 > 移动开发 > Unity3D

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: