我有一个游戏对象 ABC,我将在其确切位置生成另一个游戏对象(占位符)作为其子对象。
public new GameObject gameObject;
public GameObject placeholder;
void Start()
{
Instantiate(placeholder, new Vector3(0, 0, 0), Quaternion.Euler(0, 0, 0), gameObject.transform);
}
代码应该在 ABC 位置的 (0,0,0) 处生成占位符,没有旋转。对吧?
但我得到的恰恰相反,ABC 位于 -30、-15、0,而占位符位置为 30、15、0。
我做错了什么吗?请告知,在此先感谢。
有什么我从代码中弄错的概念吗?
你传递给实例化的位置是一个世界位置,所以他们把你的对象放在 v3.zero 上,你在实例化后看到的位置是相对于父级的值
只需使用父位置而不是零来实例化,这将是相对于父位置的零
代码应该在 ABC 位置的 (0,0,0) 处生成占位符,没有旋转。对吧?
错了,根据文件.
如果指定位置和旋转,它们将用作对象在世界空间中的位置和旋转。
因此占位符将在世界位置 (0,0,0) 生成,不幸的是没有好的方法来实现这一点,您可以先生成占位符,然后更改它的父级。
var ph = Instantiate(placeholder, new Vector3(0, 0, 0), Quaternion.Euler(0, 0, 0));
ph.transform.SetParent(gameObject.transform, worldPositionStays: false);
另一种方法是使用父母的世界位置和旋转。
var parent = gameObject.transform;
Instantiate(placeholder, parent.position, parent.rotation, parent);