根据the document(为方便起见,以下引用)
public static Object Instantiate(Object original, Transform parent);
如果我实例化预制并将变换作为第二个参数传递,则新实例化的游戏对象将成为传递变换的特定游戏对象的子对,对吧?然而,我认为新实例化的游戏对象的位置应该根据父母进行调整。
我制作了一个UI-Image作为预制件:使用posX,posY配置并锚定如下:
在层次结构中:
实例化C#脚本片段:
GameObject pageIcon = transform.parent.FindChild("PageIcon").gameObject;
Instantiate(unSelectDot, pageIcon.transform);
答案 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);
试试这个,我希望它对你有用