NGUI怎么把变量显示在Inspector面板上
我花费了很长时间,一直不清楚如何在 NGUI 里把变量显示在 Inspector 面板上。于是,我进行了一番查找,下面就是我找到的相关答案。
代码示例
//----------------------------------------------
// NGUI: Next - Gen UI kit
// Copyright ? 2011-2014 Tasharen Entertainment
//----------------------------------------------
using UnityEngine;
using UnityEditor;
[CanEditMultipleObjects]
[CustomEditor(typeof(UIScrollBar))]
public class UIScrollBarEditor : UIProgressBarEditor
{
protected override void DrawLegacyFields()
{
// 将目标对象转换为 UIScrollBar 类型
UIScrollBar sb = target as UIScrollBar;
// 在 Inspector 面板上创建一个滑动条来显示和修改 'value' 变量
float val = EditorGUILayout.Slider("Value", sb.value, 0f, 1f);
// 在 Inspector 面板上创建一个滑动条来显示和修改 'barSize' 变量
float size = EditorGUILayout.Slider("Size", sb.barSize, 0f, 1f);
// 在 Inspector 面板上创建一个滑动条来显示和修改 'alpha' 变量
float alpha = EditorGUILayout.Slider("Alpha", sb.alpha, 0f, 1f);
// 检查变量值是否发生改变
if (sb.value != val || sb.barSize != size || sb.alpha != alpha)
{
// 注册撤销操作,以便可以撤销本次修改
NGUIEditorTools.RegisterUndo("Scroll Bar Change", sb);
// 更新 UIScrollBar 的 'value' 变量
sb.value = val;
// 更新 UIScrollBar 的 'barSize' 变量
sb.barSize = size;
// 更新 UIScrollBar 的 'alpha' 变量
sb.alpha = alpha;
// 标记 UIScrollBar 对象为脏对象,以便 Unity 知道它已被修改
NGUITools.SetDirty(sb);
// 遍历所有的 UIScrollView 对象
for (int i = 0; i < UIScrollView.list.size; ++i)
{
UIScrollView sv = UIScrollView.list[i];
// 检查当前 UIScrollView 是否使用了该 UIScrollBar
if (sv.horizontalScrollBar == sb || sv.verticalScrollBar == sb)
{
// 注册撤销操作,以便可以撤销本次修改
NGUIEditorTools.RegisterUndo("Scroll Bar Change", sv);
// 更新 UIScrollView 的位置
sv.UpdatePosition();
}
}
}
}
}
代码解释
这段代码是一个自定义的编辑器脚本,用于在 Unity 的 Inspector 面板上显示和编辑 UIScrollBar 组件的变量。具体步骤如下:
- 引入必要的命名空间:使用
UnityEngine和UnityEditor命名空间。 - 设置自定义编辑器属性:使用
[CanEditMultipleObjects]和[CustomEditor(typeof(UIScrollBar))]属性,允许同时编辑多个对象,并指定该编辑器脚本用于UIScrollBar类型的组件。 - 重写绘制方法:重写
DrawLegacyFields方法,在该方法中创建滑动条来显示和修改UIScrollBar的value、barSize和alpha变量。 - 检查变量变化:检查变量值是否发生改变,如果发生改变,则注册撤销操作,更新变量值,标记对象为脏对象,并更新相关的
UIScrollView组件的位置。
通过以上步骤,就可以将 UIScrollBar 的变量显示在 Inspector 面板上,并实现变量的编辑和更新。