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

来源:互联网 发布:淘宝店铺举报链接 编辑:程序博客网 时间:2024/05/24 05:05
//方法一(鼠标左键)
    //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;
        }
    }
0 0
原创粉丝点击