在Unity

时间:2016-08-12 12:15:18

标签: unity3d position transform

我已经将HUD相机的父变换设置为它所围绕的物体的变换#';#orbiting'。麻烦的是,当我然后设置子变换的位置时,它仍然被移动到全局'坐标。

我在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摄像机的位置,使其相对于父变换位置,如果不是通过将其设置为父对象的子项然后设置其位置?  谢谢。

2 个答案:

答案 0 :(得分:1)

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

使用此:

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

答案 1 :(得分:0)

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

hudCamera.transform.SetParent(hudSelectedObject.transform);

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