在Unity中使用鼠标拖动来旋转平面

时间:2018-07-29 22:54:17

标签: unity3d rotation geometry plane

我有一个具有以下变换属性的飞机和主摄像机:

飞机

Position = (0,-1,0)
Rotation = (0,0,0)
Scale = (1,1,1)

相机

Position = (0,7,0)
Rotation = (90,0,0)
Scale = (1,1,1)

在游戏中,我希望能够右键单击平面并将其围绕其中心轴拖动。我已经尝试了很多事情,但这是我正在使用的脚本的当前版本:

void RotatePlane()
{
    //Get mouse position
    Vector3 mousePos = cam.ScreenToWorldPoint(Input.mousePosition);

    //Adjust mouse z position
    mousePos.z = cam.transform.position.y - transform.position.y;
    mouseStart.z = cam.transform.position.y - transform.position.y;

    Vector3 vecA = mouseStart - transform.position;
    vecA = vecA / vecA.magnitude;
    Vector3 vecB = mousePos - transform.position;
    vecB = vecB / vecB.magnitude;
    float angle = (float) System.Math.Acos(Vector3.Dot(vecA, vecB)) * Mathf.Rad2Deg;

    transform.rotation = Quaternion.Slerp(transform.rotation,
                      Quaternion.Euler(0, angle, 0), 
                      rotationSpeed * Time.deltaTime);
}

mouseStart的值设置为第一次单击鼠标右键时的鼠标位置。

我知道当角度(由我的初始鼠标单击和当前鼠标位置确定的向量与原点之间)的角度为0或180度时,我仍然会遇到问题,但是即使这样脚本也无法产生预期的结果其他角度。飞机跟随鼠标的速度太慢,有时会开始朝相反的方向旋转。

我感觉我的几何形状就在这里,但是我也觉得这已经是一个已解决的问题。

如何平稳旋转?

0 个答案:

没有答案