📜  unity 编辑器窗口网格字段 - C# (1)

📅  最后修改于: 2023-12-03 15:05:45.364000             🧑  作者: Mango

Unity 编辑器窗口网格字段 - C#

在 Unity 编辑器窗口中,网格字段是一种方便的 UI 控件,可以用于显示网格数据。在本文中,我们将介绍如何在 Unity 编辑器窗口中使用网格字段。

准备工作

首先,我们需要创建一个继承自 EditorWindow 的类来实现我们的编辑器窗口。在该类中,我们需要定义网格数据并为其定义一个包含网格数据的数组。如下所示:

using UnityEngine;
using UnityEditor;

public class GridWindow : EditorWindow
{
    private int[,] gridData = new int[10, 10];
}
在编辑器窗口中显示网格字段

要在编辑器窗口中显示网格字段,我们需要使用 EditorGUILayout 类的 IntField 方法创建两个整数字段,分别用于指定网格行数和列数。接下来,我们使用 EditorGUILayout 类的 BeginVerticalBeginHorizontal 方法创建一个垂直布局和一个水平布局。在水平布局中,我们使用 EditorGUILayoutIntField 方法创建两个整数字段,分别用于指定网格单元格的宽度和高度。而在垂直布局中,我们使用 EditorGUILayoutBeginHorizontal 方法创建一个水平布局,然后在其中创建多个整数字段,用于指定网格数据。

public class GridWindow : EditorWindow
{
    private int[,] gridData = new int[10, 10];
    private int numRows = 10;
    private int numCols = 10;
    private int cellWidth = 32;
    private int cellHeight = 32;

    void OnGUI()
    {
        numRows = EditorGUILayout.IntField("Rows", numRows);
        numCols = EditorGUILayout.IntField("Columns", numCols);

        EditorGUILayout.BeginVertical();

        cellWidth = EditorGUILayout.IntField("Cell Width", cellWidth);
        cellHeight = EditorGUILayout.IntField("Cell Height", cellHeight);

        EditorGUILayout.BeginHorizontal();

        for(int i = 0; i < numRows; i++)
        {
            for(int j = 0; j < numCols; j++)
            {
                gridData[i, j] = EditorGUILayout.IntField(gridData[i, j], GUILayout.Width(cellWidth), GUILayout.Height(cellHeight));
            }
        }

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.EndVertical();
    }
}

运行编辑器窗口,您将看到一个具有指定行数和列数的网格。

总结

在 Unity 编辑器窗口中使用网格字段可以方便地在 UI 中显示和编辑网格数据。在本文中,我们介绍了如何在编辑器窗口中创建网格字段并将其与网格数据关联起来。以上代码片段经过 markdown 标记后如下所示:

```csharp
public class GridWindow : EditorWindow
{
    private int[,] gridData = new int[10, 10];
    private int numRows = 10;
    private int numCols = 10;
    private int cellWidth = 32;
    private int cellHeight = 32;

    void OnGUI()
    {
        numRows = EditorGUILayout.IntField("Rows", numRows);
        numCols = EditorGUILayout.IntField("Columns", numCols);

        EditorGUILayout.BeginVertical();

        cellWidth = EditorGUILayout.IntField("Cell Width", cellWidth);
        cellHeight = EditorGUILayout.IntField("Cell Height", cellHeight);

        EditorGUILayout.BeginHorizontal();

        for(int i = 0; i < numRows; i++)
        {
            for(int j = 0; j < numCols; j++)
            {
                gridData[i, j] = EditorGUILayout.IntField(gridData[i, j], GUILayout.Width(cellWidth), GUILayout.Height(cellHeight));
            }
        }

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.EndVertical();
    }
}