我想将一个对象实例化到一个给定的位置,然后将其父对象更改为另一个游戏对象,但将实例化的对象保持在我实例化它的相同位置。相反,该对象将其位置更改为我为其父对象的对象。
我有一个空的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;
GameObject theTile = Instantiate(thePrefab, spawningZone.transform);
theTile.transform.SetParent(parentObj.transform, true);
public void SetParent(Transform parent,bool worldPositionStays);
第2段应为true。所以它会停留在原来的位置。
le.transform.position=原始位置;
我发现了我的问题所在。这是我用来以类似网格的方式生成这些预制件的另一行代码,在设置新的父对象后,我扰乱了实例化对象的本地位置。在扰乱了本地位置之后,放入用于设置父级的代码行解决了问题。
新实例化的对象的默认位置为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;
将CCD_ 3的位置设置为与CCD_。
(如果您没有意识到,实例化预制件会忽略预制件根对象的位置和旋转)