更改实例化对象的父对象会更改其位置,如何将其保持在实例化位置

  • 本文关键字:位置 对象 实例化 c# unity-game-engine
  • 更新时间 :
  • 英文 :


我想将一个对象实例化到一个给定的位置,然后将其父对象更改为另一个游戏对象,但将实例化的对象保持在我实例化它的相同位置。相反,该对象将其位置更改为我为其父对象的对象。

我有一个空的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_。

(如果您没有意识到,实例化预制件会忽略预制件根对象的位置和旋转)

最新更新