87 lines
2.4 KiB
C#
87 lines
2.4 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEditor;
|
||
|
|
||
|
[System.Serializable]
|
||
|
public class InspectorGrid
|
||
|
{
|
||
|
public int rows;
|
||
|
public int columns;
|
||
|
|
||
|
[SerializeField]
|
||
|
bool[] enabledBools;
|
||
|
}
|
||
|
|
||
|
// ------
|
||
|
|
||
|
//用PropertyDrawer自定义Inspector面板显示外观
|
||
|
[CustomPropertyDrawer(typeof(InspectorGrid))]
|
||
|
public class InspectorGridDrawer : PropertyDrawer
|
||
|
{
|
||
|
float gridWidth = 15f;
|
||
|
float gridHeight = 15f;
|
||
|
float gridSpace = 1f;
|
||
|
|
||
|
int rows;
|
||
|
int columns;
|
||
|
|
||
|
//自定义面板显示
|
||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
//position: 在Inspector面板的位置、大小
|
||
|
//property: 待绘制的属性
|
||
|
//label: 值的字段名
|
||
|
|
||
|
//绘制一个SerializedProperty的属性字段
|
||
|
EditorGUI.PropertyField(position, property, label, true);
|
||
|
|
||
|
//获取属性信息
|
||
|
SerializedProperty data = property.FindPropertyRelative("enabledBools");
|
||
|
rows = property.FindPropertyRelative("rows").intValue;
|
||
|
columns = property.FindPropertyRelative("columns").intValue;
|
||
|
|
||
|
if (rows < 0)
|
||
|
rows = 0;
|
||
|
|
||
|
if (columns < 0)
|
||
|
columns = 0;
|
||
|
|
||
|
//指定数组大小
|
||
|
data.arraySize = rows * columns;
|
||
|
|
||
|
//自定义显示区域
|
||
|
if (property.isExpanded)
|
||
|
{
|
||
|
int count = 0;
|
||
|
float targetX;
|
||
|
float targetY;
|
||
|
|
||
|
//遍历
|
||
|
for (int r = 0; r < rows; r++)
|
||
|
{
|
||
|
for (int c = 0; c < columns; c++)
|
||
|
{
|
||
|
//计算位置
|
||
|
targetX = position.xMin + ((gridWidth + gridSpace) * (c + 1));
|
||
|
targetY = 60 + position.yMin + (gridHeight + gridSpace) * (r + 1);
|
||
|
//位置、大小
|
||
|
Rect rect = new Rect(targetX, targetY, 15f * (EditorGUI.indentLevel + 1), gridHeight);
|
||
|
//绘制属性值
|
||
|
EditorGUI.PropertyField(rect, data.GetArrayElementAtIndex(count), GUIContent.none);
|
||
|
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//自定义高度
|
||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
//按照行数增加高度
|
||
|
if (property.isExpanded)
|
||
|
return EditorGUI.GetPropertyHeight(property) + 20 + (15 * (rows + 1));
|
||
|
|
||
|
return EditorGUI.GetPropertyHeight(property);
|
||
|
}
|
||
|
|
||
|
}
|