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

如何根据指定变量值创建对应数量的公共游戏对象数组

Unity中按指定数量创建公共游戏对象数组实现方案

核心注意点:不要在字段声明阶段直接用howManyGroupsOfEnemies初始化数组,C#字段初始化执行时机早于Unity序列化赋值流程,此时读取到的howManyGroupsOfEnemies永远是int默认值0,会导致数组长度错误。

完整可运行代码

using UnityEngine;

public class EnemyGroupManager : MonoBehaviour
{
    [Header("敌人分组数量")]
    public int howManyGroupsOfEnemies;
    [Header("敌人分组容器数组")]
    public GameObject[] enemyGroups;

    private void Awake()
    {
        // 运行时初始化指定长度的敌人分组数组
        enemyGroups = new GameObject[howManyGroupsOfEnemies];
    }

    // 可选:编辑器下修改分组数时自动适配数组长度
    private void OnValidate()
    {
        // 拦截负数输入,避免数组长度为负报错
        howManyGroupsOfEnemies = Mathf.Max(0, howManyGroupsOfEnemies);
        // 同步数组长度,尽可能保留已经赋值的元素
        if (enemyGroups == null || enemyGroups.Length != howManyGroupsOfEnemies)
        {
            GameObject[] tempArr = new GameObject[howManyGroupsOfEnemies];
            if (enemyGroups != null)
            {
                int copyLength = Mathf.Min(enemyGroups.Length, howManyGroupsOfEnemies);
                for (int i = 0; i < copyLength; i++)
                {
                    tempArr[i] = enemyGroups[i];
                }
            }
            enemyGroups = tempArr;
        }
    }
}

关键说明

  • 数组初始化逻辑放在Awake()生命周期方法中执行,这个时机可以正确读取到你在Inspector面板设置的howManyGroupsOfEnemies值,不会出现读不到自定义值、数组长度恒为0的问题
  • OnValidate()方法是可选的编辑器侧优化:在Unity编辑器里修改分组数量时,数组会自动同步调整长度,之前已经拖入赋值的分组对象会尽可能保留,不需要每次改完分组数都手动重置数组
  • 如果你需要自动生成每个分组对应的游戏对象,而不是手动拖入赋值,可以在Awake()的数组初始化代码后追加循环生成逻辑:
for (int i = 0; i < enemyGroups.Length; i++)
{
    // 按序号生成分组父物体
    enemyGroups[i] = new GameObject($"敌人分组_{i+1}");
    // 将生成的分组设为当前脚本挂载物体的子物体,方便层级管理
    enemyGroups[i].transform.SetParent(transform);
}

内容的提问来源于stack exchange,提问作者fourarms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:39:28