在prefab内部实例化对象,如何销毁挂载脚本GameObject时同步销毁生成实例
实现方案
你只需要给生成的预制体实例指定父节点为当前脚本挂载的GameObject即可,Unity的Instantiate接口自带父节点参数重载,修改后的代码如下:
void Start() { index = Random.Range (0, Obstacles.Length); ChosenPrefab = Obstacles[index]; // 最后一个参数传入当前对象的transform作为父节点 Instantiate(ChosenPrefab, transform.position + offset, Quaternion.identity, transform); }
原理解释
- 生成的预制体实例会自动成为当前GameObject的子物体,Unity默认会在父物体销毁时同步销毁所有子物体,完全满足你的需求
- 如果后续需要操作生成的实例,也可以先接住实例引用再手动设置父级,写法如下:
void Start() { index = Random.Range (0, Obstacles.Length); ChosenPrefab = Obstacles[index]; GameObject spawnedObstacle = Instantiate(ChosenPrefab, transform.position + offset, Quaternion.identity); // 第二个参数为true代表保留实例的世界坐标属性,不会因为挂载父节点发生位移 spawnedObstacle.transform.SetParent(transform, true); }
内容的提问来源于stack exchange,提问作者Jim Wafer
相关产品推荐
相关产品推荐

