unity2d转换和实例化UI对象的位置

时间:2017-04-08 09:41:05

标签: c# unity3d

根据the document(为方便起见,以下引用)

public static Object Instantiate(Object original, Transform parent);

如果我实例化预制并将变换作为第二个参数传递,则新实例化的游戏对象将成为传递变换的特定游戏对象的子对,对吧?然而,我认为新实例化的游戏对象的位置应该根据父母进行调整。

我制作了一个UI-Image作为预制件:使用posX,posY配置并锚定如下:

enter image description here

在层次结构中:

enter image description here

实例化C#脚本片段:

GameObject pageIcon = transform.parent.FindChild("PageIcon").gameObject;
Instantiate(unSelectDot, pageIcon.transform);

结果是新实例化的对象有一个奇怪的PosX和PosY: enter image description here 为什么会这样?谁更改了PosX和PosY?我误解了什么吗?

2 个答案:

答案 0 :(得分:1)

  

为什么会这样?谁更改了PosX和PosY?我有没有?   误解了什么?

此问题的解决方案取决于您的Unity版本。

Unity 5.5 之前,当您执行Instantiate(unSelectDot, pageIcon.transform);时,GameOject将在世界空间中实例化,而不是预制件的位置。

Unity 5.5 及更高版本开始,当您执行Instantiate(unSelectDot, pageIcon.transform);时,GameOject默认使用对象位置作为本地位置。

您很有可能在Unity 5.5下使用Unity版本。在这种情况下,将false传递给Instantiate函数的第三个参数。

Instantiate(unSelectDot, pageIcon.transform, false);

如果这不起作用,请尝试true。虽然,false应该这样做。

来自Unity 5.5的注意事项release Note

  

核心:使用Object.Instantiate(Object,Transform)现在将使用   默认情况下,对象位置为本地位置。这是一个变化   来自5.4行为,它使用Object位置作为世界。

答案 1 :(得分:0)

当我想要相对于其父对象实例化对象时,我做的是:

Instantiate(unSelectDot, GameObject.Find("PageIcon").transform);

试试这个,我希望它对你有用