Unity中如何将实例化GameObject作为父对象子元素存入Queue队列
Unity实例化GameObject设置父对象并存入Queue的实现方案
你只需要在实例化对象后调用transform.SetParent()方法绑定父节点,再存入队列即可,修改方案如下:
- 首先在你的脚本类中声明父对象引用,后续可在Inspector面板直接拖拽指定要作为父节点的游戏对象
// 声明父对象引用,Inspector拖拽赋值即可 public Transform targetParent; // 提前声明对应类型的队列,避免类型转换报错 private Queue<GameObject> warriorsQ = new Queue<GameObject>();
- 修改你的
SpawnSolders方法,实例化对象后先设置父节点再入队:
void SpawnSolders() { for (int i = 0; i < warriorsCount; i++) { if (isOcupied[i] == false) { isOcupied[i] = true; // 第一步:实例化生成对象 GameObject newWarrior = Instantiate(war1, battlePositions[i].position, transform.rotation); // 第二步:设置父对象,第二个参数控制是否保留世界坐标,不需要保留传false即可避免位置偏移 newWarrior.transform.SetParent(targetParent, false); // 第三步:存入队列 warriorsQ.Enqueue(newWarrior); } } }
补充说明:
SetParent方法的第二个参数worldPositionStays如果设为true,生成的对象会保留实例化时传入的世界坐标,不会因为绑定父节点发生位置变化;如果设为false,对象会适配父节点的坐标系,继承父节点的缩放、旋转属性,适合UI元素、同场景下的单位对象使用。
内容的提问来源于stack exchange,提问作者OmaeWAc
相关产品推荐
相关产品推荐

