Unity/C# - 根据另一个 object 手动设置 object 的位置和旋转

Unity/C# - Set position and rotation manually of object based on another object

我有 3 个 object 的 3D Space,但它们只是 3D object 的 2D 表示。 Object A (Obj-A) 是 parent object 和 2 个不同的 objects (Obj-B, Obj-C)没有作为 child 依附于 Obj-A,但我必须像它们是它的 child 一样继续前进。我正在移动和旋转 Obj-A,我正在根据 Obj-A 设置 Obj-B 和 Obj-C 的位置,偏移量有点像这样:

objB.transform.position = objA.transform.position + offset;
objC.transform.position = objA.transform.position - offset;

当然,当Obj-A旋转时,我希望Obj-B和Obj-C的位置也受到其旋转的影响。 当我根据与 Obj-A 相同的逻辑旋转 Obj-B 和 Obj-C 时,它们仅在局部轴上旋转。 基本上它应该是这样的:

我正在使用 Unity,但这部分项目是在独立于 Unity 的 C# 脚本上计算的。有了这个,我只能访问 objects 的变换位置和旋转角度,只需将 Obj-B 和 Obj-C 作为 children 添加到 Obj-A是关闭的table。

请帮忙!谢谢!

首先你应该像

一样复制旋转
objB.transform.rotation = objA.transform.rotation;
objC.transform.rotation = objA.transform.rotation;

那么你应该使用 offset componentwise 与本地坐标系 objA:

objB.transform.position = objA.transform.position 
                          + offset.x * objA.transform.right
                          + offset.y * objA.transform.up
                          + offset.z * objA.transform.forward;

objB.transform.position = objA.transform.position 
                          - offset.x * objA.transform.right
                          - offset.y * objA.transform.up
                          - offset.z * objA.transform.forward;