You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:50:25