我最初在answers.unity3d上发布了这个问题,但没有得到答案,Unity3d从父源实例化子预置
我有一个名为GreyPiece的Prefab,当点击它时,这个GreyPiece应该创建相同类型的子级,目前我的GreyPiece类有一个公共转换对象GreyPieceTransform
public Transform greyPieceTransform;
此转换与在GreyPiece编辑器中拖放的主Unity3d预置文件相同,当单击该对象时,我根据需要实例化该对象的多个子对象,并将转换设置为它的父对象。
Transform greyPiece = Instantiate(greyPieceTransform, transform.position, transform.rotation) as Transform;
greyPiece.parent = transform;
Debug.Log("this id "+transform.GetInstanceID()+"\tprefab id "+greyPieceTransform.GetInstanceID()+"\tchild id "+greyPiece.GetInstanceID());
到目前为止,如果我创建一个对象并单击它,我将有一个子对象。
现在,如果我创建2,我会得到这个
如果我创造了3
- child
- child
- child
- child
基本上,原来的GreyPieceTransform似乎正在改变,当我尝试实例化另一个对象时,它接受修改的当前父对象并从中实例化,如果我没有设置新实例化对象的父对象,这个问题就不会发生。
编辑:--我还添加了一个调试输出,debug.Log输出如下
这个id -185148预制件id -185148儿童id -185236 这个id -185148预制件id -185148儿童id -185318 这个id -185148预制件id -185148儿童id -185418
如您所见,父转换和预置转换具有相同的ids,但它们不应该
为了更清楚地说明这一点,我决定将转换命名为“灰色"+greyPiece.getInstanceID();这是它在层次结构视图中的样子。
因此,现在,我如何让grePieceTransform实际引用预置文件实例化,而不是让它具有与父引用相同的引用?
发布于 2014-09-14 01:03:02
我想问题是以下几点。在第一次实例化时,transform
和greyPieceTransform
指向同一个对象。你可以检查一下,比较实例ids。
如果是这样的话,你看到的行为是合理的。当您第一次实例化一个新的GameObject
时,源对象没有父对象,也没有子对象,因此只有一个子对象。第二次使用一个子实例实例化父进程,并将其作为子实例附加(图2)。诸若此类。
下面是一个简单的片段,可能会有所帮助:
public class Test : MonoBehaviour {
public Transform prefab;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("prefab id " + prefab.GetInstanceID() + " this id " + transform.GetInstanceID());
}
}
}
它将根据对象引用的设置方式打印不同的It组合。
案例1
如果Test
附加到hierarchy
中的对象,而prefab
是对项目中的预置文件的引用,则ids将是不同的。
案例2
如果将Test
附加到hierarchy
中的一个对象(这是一个预置实例),并且prefab
是对项目id中链接的预置文件的引用,则仍然会有所不同。(prefab是从实例对象到预置对象的链接。在这种情况下,它应该是一个prefab属性覆盖,您应该在检查器中看到粗体字体)。Ids将是不同的.。
案例3
如果将Test
附加到预置文件,而字段prefab指向自身,则当第一次实例化它(或拖入层次结构)时,transform和prefab字段将指向同一个对象( prefab实例的转换)。Ids将相等.
显然,当从预置转换greyPieceTransform实例化一个对象时,它使用它作为当前对象并修改原始对象,因此greyPiece和greyPieceTransform将是相同的
不是的。如果对象的greyPieceTransform
和transform
不同,则不会修改“原始”。但也许他们不是。
https://stackoverflow.com/questions/25831217
复制