我想将一个对象实例化到给定的位置,然后将其父对象更改为另一个游戏对象,但是将实例化的对象保持在与实例化对象相同的位置。取而代之的是,该对象将其位置更改为我作为父母的对象。
我已经将这个空的GameObject应用于脚本。我将一个对象实例化到另一个空GameObject的位置,效果很好。然后,我将实例化的对象设置为另一个空GameObject的子对象,因为我想移动用作实例化位置的GameObject而不移动实例化的对象,因为我想将实例化到一个新的位置。但这失败了,我生成的对象将自己移动到第三个空GameObject的位置,我将其设置为父对象。
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform);
设置新的父对象后,实例化的对象将自身移动到父对象的位置。 我尝试了多种方法来执行此操作,但是对于我尝试过的每种方法,都在发生同一件事,实例化的对象移到了新父对象的位置。 这些是我尝试过的替代方法:
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.parent = transform.parent;
;
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform, false);
;
Vector3 originalPos = spawningZone.transform.position;
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform);
theTile.transform.position = originalPos;
答案 0 :(得分:1)
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform, true);
public void SetParent(Transparent parent,bool worldPositionStays);
第二段应该为真。因此它将保持原样。
le.transform.position = originalPos;
答案 1 :(得分:0)
新实例化的对象的默认位置为local-0,0,0
。如果您在实例化调用中为它们提供了父对象,则会在父对象的位置创建它们(如果您直到之后才对其进行父设置,则它们将在world-0,0,0
处生成)。
您实际上从未对职位进行任何修改。甚至这个片段,
Vector3 originalPos = spawningZone.transform.position;
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform);
theTile.transform.position = originalPos;
将theTile
的位置设置为与spawningZone
的位置相同。
(如果您不知道,实例化预制件将忽略预制件根对象的位置和旋转)
答案 2 :(得分:0)
我发现了我的问题所在。这是我用来以网格状方式生成这些预制件的另一行代码,在我设置新的父对象后 ,我搞砸了实例化对象的本地位置。在弄乱本地位置后放上用于设置父级的代码行即可解决此问题。