Unity 3D获得相机旋转角度

时间:2014-05-27 22:16:36

标签: unity3d

在我的团结应用程序中,我最初将相机设置在某个位置。后来我动态改变了相机位置。在这之后,我需要找到它旋转的角度/旋转,另一个物体需要以相同的角度旋转,但方向相反。
我有两个问题 1.如何找到相机移动的角度?
2.如何以相同的值旋转游戏对象,但方向相反 我尝试过像target.transform.Rotate(Camera.main.transform.position - cameraNewPos);并搜索了很多,但找不到答案。

3 个答案:

答案 0 :(得分:0)

在进行更改以查看不同之前,您始终可以将当前transform.rotation与其原始值进行比较。然后,将相同的更改(反向)应用于您的其他对象。

在相机上: var delta = transform.rotation - _originalRotation;

在该对象上: transform.rotation = transform.rotation - delta;

答案 1 :(得分:0)

如果您的相机位于P1位置,并且方向Q1处于开始位置,而P2,Q2位于移动位置后,您可以使用(使用transform.rotation和transform)找到从1到2的平移T和旋转R. .position,表示对象的世界变换,与其层次结构无关):

R = Q1.Inverse()* Q2

T = P2 - P1

请注意,您不能减去四元数。

然后您可以相应地移动您的其他对象。

Obj.position = initialCameraPosition - T

Obj.rotation = initialCameraRotation * R(或R.Inverse(),如果你想镜像旋转)

答案 2 :(得分:0)

所以: 如果要获得一次到一次的旋转量,可以只从头开始保存数据,然后减去终点旋转量-开始旋转。

Vector3 iRotation;
Vector3 amountRot;
void Start() { // for example
    iRotation = obj.transform.rotation.eulerAngles;
}

void Update() { // at some point you want
    if (sth) amountRot = obj.transform.rotation.eulerAngles - iRotation;

    obj2.transform.rotation = Quaternion.Euler(-obj.transform.rotation.eulerAngles); // rotate opposite