设置子变换的位置,相对于 Unity 中的父变换

Setting position of child transform, relative to parent in Unity

我已经将 HUD 相机变换的父对象设置为它 'orbiting' 的对象的变换。麻烦的是,当我设置子转换的位置时,它仍然被移动到 'global' 坐标。

我已经在 Unity 编辑器中对此进行了测试,暂停了游戏,HUD 摄像机确实是父对象的子对象(它列在该对象的层次结构下)。

此处为 Unity 教程...
https://unity3d.com/learn/tutorials/topics/interface-essentials/hierarchy-and-parent-child-relationships
...似乎很清楚,一旦一个对象成为另一个对象的子对象,它的位置就会相对于父对象(从视频开始大约 45 秒开始)。但是在 Unity 编辑器中以编程方式执行此操作与手动执行此操作之间有区别吗?

这是我的相关代码:

 hudCamera.transform.parent = hudSelectedObject.transform;
 hudCamera.transform.position = new Vector3(0, 0, -50); // this still moves the HUD camera to global position 0, 0, -50 - why?

父对象没有定位到0,0,0,所以不只是子对象位置是相对于0,0,0设置的

那么我如何以编程方式设置 HUD 相机的位置,使其相对于父变换位置,如果不是仅将其设置为父对象的子对象,然后设置其位置呢? 谢谢。

而不是hudCamera.transform.parent = hudSelectedObject.transform;

使用这个:

hudCamera.transform.SetParent(hudSelectedObject.transform);
hudCamera.transform.localScale = Vector3.one;
hudCamera.transform.localPosition= Vector3.zero; // Or desired position

每当您以编程方式实例化 UI 项目时。每当我通过代码添加任何 UI 项目时。我使用以下代码(已更新以供您使用)

hudCamera.transform.SetParent(hudSelectedObject.transform);

hudCamera.transform.localScale = Vector3.one;       
hudCamera.GetComponent<RectTransform>().sizeDelta = Vector2.zero;