U3D编辑器拓展

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/blues1021。 https://blog.csdn.net/Blues1021/article/details/78167153
U3D除了提供Runtime class,还提供了Editor class用于编辑器的拓展开发,包括编辑器环境下的GUI类,编辑器工具类,编辑器操作类等。

自定义编辑窗口:

using UnityEditor;
public class MyWindow : EditorWindow {
static MyWindow myWindow;
[MenuItem("Window/MyWindow")]//在unity菜单Window下有MyWindow选项
static void Init()
{
myWindow = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow), false, "MyWindow", false);
myWindow.Show();
}
void OnEnable()
{
}
void OnGUI()
{
EditorGUILayout.LabelField("聚焦窗体名字:"+EditorWindow.focusedWindow.ToString());
}
[MenuItem("Custom Editor/Focus Window")]
static void FocusWindow()
{
myWindow.Focus();
}
}

自定义Inspector视图:

using UnityEditor;
public class MyInspector: Editor {
void OnInspectorGUI()
{
}
}

自定义场景视图:

using UnityEngine;
using System.Collections;
/*samcen*/
public class Test : MonoBehaviour {
}

using UnityEditor;
using UnityEngine;

//自定义Tset脚本
[CustomEditor(typeof(Test))]
//请继承Editor
public class MyEditor : Editor
{
void OnSceneGUI()
{
//得到test脚本的对象
Test test = (Test) target;
//绘制文本框
Handles.Label(test.transform.position + Vector3.up*2,
test.transform.name +" : "+ test.transform.position.ToString() );
//开始绘制GUI
Handles.BeginGUI();
//规定GUI显示区域
GUILayout.BeginArea(new Rect(100, 100, 100, 100));
//GUI绘制一个按钮
if(GUILayout.Button("这是一个按钮!"))
{
Debug.Log("test");
}
//GUI绘制文本框
GUILayout.Label("我在编辑Scene视图");
GUILayout.EndArea();
Handles.EndGUI();
}
}

更多:

unity编辑器开发
[MenuItem]
[ContextMenu]
[AddComponentMenu]
需要调用静态函数。
在编辑器下也会执行OnGui,执行update.
编辑器脚本需要在Editor目录下属于UnityEditor命名空间,因为是在UnityEngine执行逻辑后面编译的,可以方便使用Excute下的代码。

需要窗口,需要该类继承自EditorWindow.
一般需要MenuItem添加静态方法调用返回该类实例。
窗口内部的OnGui方法需要重写,显示需要的控件,也可以使用EditorGUILayout在原生接口上提供更加有用方便的控件。
除了OnGUI,OnSeletionChange,OnFocus,OnLoseFocus也可以被调用。
编辑图片来自大图时候的设置:
textruetype sprite, SpriteMode type muilt.

猜你喜欢

转载自blog.csdn.net/Blues1021/article/details/78167153