0
点赞
收藏
分享

微信扫一扫

Unity(十七):拓展编辑器 - 重绘脚本面板、添加并自定义预览面板


重绘脚本面板

Unity(十七):拓展编辑器 - 重绘脚本面板、添加并自定义预览面板_c#

using UnityEditor;
using UnityEngine;

namespace Scripts_03
{
#region

public class ExpandPlane : MonoBehaviour
{
public enum Sex
{
a = 1,
b
}

public string str1;
public string str2;
public Vector3 v3;
public int num1;
public GameObject go;
public bool isTrue;
public Sex sex = Sex.b;
[SerializeField] private Rigidbody rb;
}
#if
// 可对原有类的属性进行拓展和修改
[CustomEditor(typeof(ExpandPlane))]
public class ExpandPlaneDraw : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI(); // 原始定义展示(系统默认绘制)

// 获取脚本
ExpandPlane script = (ExpandPlane)target;

// 开始绘制
script.v3 = EditorGUILayout.BeginScrollView(script.v3, true, true);

GUILayout.Label("========== Vertical 开始绘制 ==========");
EditorGUILayout.BeginVertical();
GUILayout.Label($"str1: {script.str1}");
GUILayout.Label($"str2: {script.str2}");
GUILayout.Label("v3:");
script.v3.x = EditorGUILayout.FloatField("X", script.v3.x);
script.v3.y = EditorGUILayout.FloatField("Y", script.v3.y);
script.v3.z = EditorGUILayout.FloatField("X", script.v3.z);
GUILayout.Label("num1:");
script.num1 = EditorGUILayout.IntField(script.num1);

GUILayout.Label("========== Horizontal 开始绘制 ==========");
EditorGUILayout.BeginHorizontal();
GUILayout.Label("go:");
script.go = (GameObject)EditorGUILayout.ObjectField(script.go, typeof(GameObject), false);
GUILayout.Label("isTrue:");
script.isTrue = EditorGUILayout.Toggle(script.isTrue);
EditorGUILayout.EndHorizontal();
GUILayout.Label("========== Horizontal 结束绘制 ==========");

script.sex = (ExpandPlane.Sex)EditorGUILayout.EnumPopup("sex", script.sex);
if (GUILayout.Button("a"))
script.sex = ExpandPlane.Sex.a;
if (GUILayout.Button("b"))
script.sex = ExpandPlane.Sex.b;
EditorGUILayout.EndVertical();
GUILayout.Label("========== Vertical 结束绘制 ==========");

EditorGUILayout.EndScrollView();
}
}
#endif

#endregion
}

添加并自定义预览面板

Unity(十七):拓展编辑器 - 重绘脚本面板、添加并自定义预览面板_unity_02

[CustomPreview(typeof(GameObject))]
public class ObjPreview : ObjectPreview
{
private GameObject _gameObject;

private Editor _editor;

// 是否添加预览窗口
public override bool HasPreviewGUI()
{
return true;
}

public override void OnPreviewGUI(Rect r, GUIStyle background)
{
GUILayout.Label("Hello GameObject!!!");
var gameObject = (GameObject)EditorGUILayout.ObjectField(_gameObject, typeof(GameObject), true);
// 每次gameObject改变时都实例化_editor(gameObject != _gameObject ---> 比较当前GameObject与上一次的区别)
if (gameObject != _gameObject)
{
_gameObject = gameObject;
_editor = Editor.CreateEditor(_gameObject);
}

if (_gameObject != null)
// 预览对象
_editor.OnPreviewGUI(GUILayoutUtility.GetRect(300, 300), EditorStyles.whiteLabel);
}
}


举报

相关推荐

0 条评论