首页 文章

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

提问于
浏览
0

我已经将HUD相机变换的父级设置为它“轨道运行”对象的变换 . 麻烦的是,当我然后设置子变换的位置时,它仍然被移动到'全局'坐标 .

我在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

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

    用这个 :

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

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

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

相关问题