如何获取列表中对象的Transform?不同名称敌人出生点解决方案
解决敌人出生点Transform获取问题的几种方案
利用父物体批量收集
新建一个空GameObject(比如命名为SpawnPointsContainer),把所有出生点都设为它的子物体。之后在代码里通过父物体直接获取所有子物体的Transform:List<Transform> spawnPoints = new List<Transform>(); Transform container = GameObject.Find("SpawnPointsContainer").transform; foreach (Transform child in container) { spawnPoints.Add(child); }这种方式不需要修改任何出生点的属性,新增出生点时直接拖到父物体下即可,维护成本极低。
自定义组件标记法
创建一个空的标记组件,不需要写任何逻辑:public class SpawnPoint : MonoBehaviour {}给每个出生点的GameObject挂上这个组件,之后在代码里通过组件类型批量获取:
List<Transform> spawnPoints = new List<Transform>(); SpawnPoint[] allSpawnMarkers = FindObjectsOfType<SpawnPoint>(); foreach (SpawnPoint marker in allSpawnMarkers) { spawnPoints.Add(marker.transform); }这是最推荐的方案之一,标记清晰,不受名称、层级变动影响,性能也比按名称遍历更优。
名称规则匹配
如果所有出生点名称都包含固定关键词(比如都以spawn开头),可以遍历场景中所有Transform并筛选:List<Transform> spawnPoints = new List<Transform>(); Transform[] allTransforms = FindObjectsOfType<Transform>(); foreach (Transform t in allTransforms) { if (t.name.StartsWith("spawn")) // 也可以用Contains匹配关键词 { spawnPoints.Add(t); } }注意:
FindObjectsOfType会遍历所有活跃物体,场景物体较多时建议只在初始化阶段调用一次。ScriptableObject配置预设
创建一个SpawnPointConfig类型的ScriptableObject:[CreateAssetMenu(fileName = "SpawnPointConfig", menuName = "Configs/Spawn Point Config")] public class SpawnPointConfig : ScriptableObject { public List<Transform> spawnPoints; }在编辑器里创建该配置文件,手动把所有出生点的Transform拖到列表中。代码里直接读取配置:
public SpawnPointConfig spawnConfig; // 在Inspector面板赋值 List<Transform> spawnPoints; void Start() { spawnPoints = spawnConfig.spawnPoints; }这种方式完全可控,适合出生点数量不多的场景,后期调整直观。
内容的提问来源于stack exchange,提问作者bob maximus
相关产品推荐
相关产品推荐

