Unity3d 如何将预制克隆对象相对于父对象的位置设置为(0,0,0)?

Unity3d 如何将预制克隆对象相对于父对象的位置设置为(0,0,0)?,unity3d,Unity3d,我有一个用户界面面板。 在该面板中,我想多次将相同的预制件添加到一个小圆圈中。 我的代码如下所示: GameObject o=GameObject.FindPanelCells; Rect r=o.GetComponent.Rect; RemoveAllChildreno.transform; 对于浮点数i=0;i

我有一个用户界面面板。 在该面板中,我想多次将相同的预制件添加到一个小圆圈中。 我的代码如下所示:

GameObject o=GameObject.FindPanelCells; Rect r=o.GetComponent.Rect; RemoveAllChildreno.transform; 对于浮点数i=0;i<10;i+=1.0{ GameObject c=实例化 预制单元、向量3.0、四元数、恒等式、o变换 ; c、 transform.localScale=新向量31,1,1; Debug.LogBefore:+c.transform.localPosition.ToString; c、 transform.localPosition=新向量3i*10,0,0; Debug.LogAfter:+c.transform.localPosition.ToString; } 在调试日志中,我可以看到1迭代日志:

Before : (-288.1, 0.0, 1559.4)
After : (0.0, 0.0, 0.0)
当我进入游戏时,这里是第一个预制件的位置:288.11、298.11、308.11等等。所以我10岁就开始工作了

如果我在游戏运行时从编辑器中手动将x设置为0,它将转到我希望它转到的位置=0

我只想让我的动态生成的预置转到I*10,0,0位置,而不是现在的288.11+I*10,0,0位置

我希望他们都到x的位置,0到10,20,30等等

我所说的位置0,0,0是相对于父对象的左上角

以下是父配置的屏幕截图:

这是我的预制件:

当我手动将0,0,0设置到它的位置时,我希望第一个元素的位置在这里:


我遗漏了什么?

好的,谢谢你的澄清,我试图保持你的代码完整,并对注释进行了注释。这将把预制件固定到它的相对锚定元素上

公共交通//父母亲 公共游戏对象单元; 对于浮点数i=0;i<10;i+=1.0 { GameObject c=实例化Prefabcell,Vector3.0,四元数.identity; //删除父参数,并在此处进行分解。 //第二个参数强制worldpos为false c、 transform.SetParentt,false; c、 transform.localScale=新向量31,1,1; Debug.LogBefore:+c.transform.localPosition.ToString; //操作UI元素时使用定位位置, //position属性对于canvas来说是不直观的。 c、 GetComponent.anchoredPosition=新向量3i*10,0,0; Debug.LogAfter:+c.transform.localPosition.ToString; }
我认为应该在o.transform.position而不是Vector3.zero实例化对象。实例化是在世界空间中完成的,即使你指定了一个父对象。这也有点不相关,但为什么你要用浮点数递增。他在他的Vector3中使用i,它只接受浮点数。我假设这是为了避免施放。施放常数有什么性能增益吗?他仍然需要明确地施放一些东西。只要你能避免施放,总会有一点性能提升。。。但是他仍然在使用施法,尽管在他的for循环中不需要施法。。浮动1.0。。可以很容易地只写1.0f结尾处的f不是强制转换。我希望定位是相对的=在父对象中,0,0,0=左上角到父对象中不是父对象的0,0,0,在中间?我认为您的脚本正在做您想要的事情,但也许您对世界单位感到困惑?如果您在编辑器中手动设置x位置,这与设置objects transform.position.x属性是一样的。试着从localPosition切换到plain position,看看它是否有效。我认为Brandon的做法是正确的。如果逻辑上您希望在相对空间中工作,则使用localPosition。但作为说明,我假设我已经正确地阅读了这个问题:288.11+i*10,0,0在世界空间=i*10,0,0在相对父空间。