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

Unity Inspector能否初始化二维数组?自定义脚本实现方法咨询

解决Unity中二维数组无法在Inspector初始化的问题

Unity默认不支持在Inspector面板中直接初始化多维数组(比如int[,]),但完全可以通过脚本实现初始化,下面提供两种实用方案:

方案一:用OnValidate自动初始化

在你的MonoBehaviour类中添加OnValidate方法,该方法会在脚本加载或Inspector值变更时自动执行,帮你完成数组初始化:

using UnityEngine;

public class ArrayHandler : MonoBehaviour
{
    [SerializeField] private int rowCount = 2;
    [SerializeField] private int columnCount = 2;
    [SerializeField] private int[,] twoDimensionalArray;

    private void OnValidate()
    {
        // 防止行数/列数为0的无效值
        rowCount = Mathf.Max(1, rowCount);
        columnCount = Mathf.Max(1, columnCount);

        // 仅当数组尺寸与设定值不符时重新初始化
        if (twoDimensionalArray == null 
            || twoDimensionalArray.GetLength(0) != rowCount 
            || twoDimensionalArray.GetLength(1) != columnCount)
        {
            twoDimensionalArray = new int[rowCount, columnCount];
            
            // 可选:给数组设置默认值,比如全部设为1
            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {
                    twoDimensionalArray[i, j] = 1;
                }
            }
        }
    }
}

使用时,你只需在Inspector中调整rowCount和columnCount的数值,数组会自动更新为对应大小,还能顺便设置默认值。

方案二:自定义Editor脚本实现可视化编辑

如果需要在Inspector中直接编辑二维数组的每个元素,可以编写自定义Editor脚本(需放在项目的Editor文件夹下):

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(ArrayHandler))]
public class ArrayHandlerEditor : Editor
{
    public override void OnInspectorGUI()
    {
        ArrayHandler targetScript = (ArrayHandler)target;

        // 让用户输入行列数
        targetScript.rowCount = EditorGUILayout.IntField("行数", targetScript.rowCount);
        targetScript.columnCount = EditorGUILayout.IntField("列数", targetScript.columnCount);

        // 修正非法数值
        targetScript.rowCount = Mathf.Max(1, targetScript.rowCount);
        targetScript.columnCount = Mathf.Max(1, targetScript.columnCount);

        // 初始化或更新数组尺寸
        if (targetScript.twoDimensionalArray == null 
            || targetScript.twoDimensionalArray.GetLength(0) != targetScript.rowCount 
            || targetScript.twoDimensionalArray.GetLength(1) != targetScript.columnCount)
        {
            targetScript.twoDimensionalArray = new int[targetScript.rowCount, targetScript.columnCount];
        }

        // 绘制数组元素编辑区域
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("二维数组元素");
        for (int i = 0; i < targetScript.rowCount; i++)
        {
            EditorGUILayout.BeginHorizontal();
            for (int j = 0; j < targetScript.columnCount; j++)
            {
                targetScript.twoDimensionalArray[i, j] = EditorGUILayout.IntField(
                    targetScript.twoDimensionalArray[i, j], 
                    GUILayout.Width(50)
                );
            }
            EditorGUILayout.EndHorizontal();
        }

        // 保存修改
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
}

添加这个脚本后,你就能在Inspector面板中直接编辑二维数组的每个元素,操作更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:30:56