【问题标题】:Unity 3D get camera rotated angleUnity 3D获取相机旋转角度
【发布时间】:2019-06-04 00:53:19
【问题描述】:

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

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

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

    【讨论】:

    • @derHugo 如果 Quaternion 难以使用,为什么不将其转换为 euler?
    【解决方案2】:

    如果您的相机位于位置 P1,并且在开始时方向为 Q1,并且在您移动它之后,您可以找到从 1 到 2 的平移 T 和旋转 R(使用 transform.rotation 和 transform .position,代表对象的世界变换,独立于其层次结构):

    R = Q1.Inverse() * Q2

    T = P2 - P1

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

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

    Obj.position = initialCameraPosition - T

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

    【讨论】:

      【解决方案3】:

      所以: 如果您想获得一次又一次应用的旋转量,您可以从头开始保存数据,然后减去结束旋转 - 开始旋转。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 2018-05-16
        相关资源
        最近更新 更多