Unity中Transform[]数组无法移除元素?求移除特定生成点的方法
问题解答
对,Transform[]这种数组类型确实没法直接移除元素——C#里的数组是固定长度的,一旦初始化完成就不能改变大小,所以根本没有RemoveAt()或者Remove()这类方法,你调用自然会失败。
给你改改代码,换成List<Transform>来实现动态增删的需求:
首先在脚本顶部加引用:
using System.Linq; using System.Collections.Generic;
然后修改变量和相关方法:
// 把数组换成List,支持动态增删 public List<Transform> spawnPoints = new List<Transform>(); void Awake() { // 获取子物体的Transform数组,转成List spawnPoints = GetComponentsInChildren<Transform>().ToList(); } public void Spawn() { // 先判断List里还有有效生成点(跳过第一个父物体的Transform) if(spawnPoints.Count <= 1) return; GameObject enemy = GameManager.instance.objectManager.Get(GameManager.instance.objIndex); // 用List的Count代替数组的Length enemy.transform.position = spawnPoints[Random.Range(1, spawnPoints.Count)].position; enemy.GetComponent<Enemy>().Init(GameManager.instance.spawnData[GameManager.instance.level]); }
当你需要销毁某个生成点物体并移除它时,比如拿到要移除的目标TransformtargetSpawnPoint,直接调用:
// 从List里移除这个生成点 spawnPoints.Remove(targetSpawnPoint); // 再销毁物体 Destroy(targetSpawnPoint.gameObject);
注意:GetComponentsInChildren<Transform>会把当前脚本所在物体的Transform也包含进去,所以你原来的Random.Range(1, ...)是对的,跳过了父物体的位置,这个逻辑可以保留。
内容的提问来源于stack exchange,提问作者Debug
相关产品推荐
相关产品推荐

