您的位置:首页 > 其它

拖动三维物体360度旋转3种方法

2016-02-18 14:34 369 查看
//方法一(鼠标左键)

    //private Transform hitTransfrom;

    //void Update()

    //{

    //    if (Input.GetMouseButtonDown(0))

    //    {

    //        RaycastHit hit;

    //        Ray mouseray = Camera.main.ScreenPointToRay(Input.mousePosition);

    //        if (Physics.Raycast(mouseray, out hit))

    //        {

    //            hitTransfrom = hit.transform;

    //        }

    //    }

    //    else if (Input.GetMouseButtonUp(0))

    //    {

    //        hitTransfrom = null;

    //    }

    //    if (hitTransfrom)

    //    {

    //        Matrix4x4 localmatrix = hitTransfrom.worldToLocalMatrix;//Matrix4x4矩阵 worldToLocalMatrix矩阵坐标世界到自身

    //        Vector3 vUp = localmatrix.MultiplyVector(new Vector3(0, 1, 0));//MultiplyVector变换方向

    //        Vector3 vRight = -localmatrix.MultiplyVector(new Vector3(1, 0, 0));

    //        float fMoveX = -Input.GetAxis("Mouse X") * Time.deltaTime * 200.0f;

    //        Quaternion rotation = Quaternion.AngleAxis(fMoveX, vUp);//Quaternion.AngleAxis四元数.角轴(float,vector3)

    //        hitTransfrom.localRotation *= rotation;//localRotation自身旋转角度

    //        float fMoveY = -Input.GetAxis("Mouse Y") * Time.deltaTime * 200.0f;

    //        Quaternion rotoy = Quaternion.AngleAxis(fMoveY, vRight);

    //        hitTransfrom.localRotation *= rotoy;

    //    }

    //}

    /// <summary>

    /// 方法二(鼠标拖动左键简单)

    /// </summary>

    //void OnMouseDrag()//OnMouseDrag当鼠标拖动

    //{

    //    this.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y"), -Input.GetAxis("Mouse X"), 0) * 6f, Space.World);

    //}

    //方法三(添加了鼠标托拽后的惯性)

    private bool onDrag = false;

    public float speed = 6f;

    private float tempSpeed;

    private float axisX;

    private float axisY;

    void OnMouseDrag()

    {

        onDrag = true;

        axisX = -Input.GetAxis("Mouse X");

        axisY = Input.GetAxis("Mouse Y");

    }

    float Rigid()

    {

        if (onDrag)

        {

            if (tempSpeed < speed)

            {

                tempSpeed += speed * Time.deltaTime * 5;

            }

            else

            {

                tempSpeed = speed;

            }

        }

        else

        {

            if (tempSpeed > 0)

            {

                tempSpeed -= speed * Time.deltaTime;

            }

            else

            {

                tempSpeed = 0;

            }

        }

        return tempSpeed;

    }

    void Update()

    {

        this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World);

        if (!Input.GetMouseButton(0))

        {

            onDrag = false;

        }

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