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