我有一个具有以下变换属性的飞机和主摄像机:
飞机:
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度时,我仍然会遇到问题,但是即使这样脚本也无法产生预期的结果其他角度。飞机跟随鼠标的速度太慢,有时会开始朝相反的方向旋转。
我感觉我的几何形状就在这里,但是我也觉得这已经是一个已解决的问题。
如何平稳旋转?