Unity编辑器Editor常用命令一站式学习
发表于2017-10-14
因为Unity的编辑器一些方法,是项目中不常用到的,为了避免以后忘记
今天特意抽时间把最近使用和一些不常用的Editor用到的方法都列举出来
有些写了注释,后面就懒得写注释了,不过看预览效果,都能找得到。
上预览图:
具体内容直接上代码:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class EditorTest : EditorWindow
{
enum EnumTest { 网, 虫, 测, 试 }
static EditorTest window;
[MenuItem("Tools/测试编辑器功能")]
static void Test()
{
window = (EditorTest)EditorWindow.GetWindow(typeof(EditorTest), false, "测试编辑器功能");
window.Show();
}
#region 属性
int testInt = 0;
float testFloat = 0;
float floatSlider = 0;
float maxValue = 20;
float minValue = -50;
string testStr = "网虫虫";
bool testBool = true;
int toolbarOption = 0;
string[] toolbarStr = new string[] { "这", "是", "Toolbar" };
EnumTest enumTest;
EnumTest enumTest2;
int enumInt = 0;
int selectedSize = 1;
string[] names = { "网", "虫", "测", "试" };
int[] sizes = { 1, 2, 4 };
string tagStr = "";
int layerInt = 0;
int maskInt = 0;
Vector3 testVector3;
Color testColor;
Rect testRect;
GameObject gameObject;
Texture texture;
bool isShowScrollView = false;
Vector2 scrollPosition;
#endregion
private void OnGUI()
{
this.Repaint(); // 强制重绘
if(secondWindow || secondWindow2)
GUI.enabled = false;
GUILayout.Label(testStr); // 文本格式:网虫虫 不可输入、不可选
GUIStyle fontStyle = new GUIStyle();
fontStyle.normal.background = null; //设置背景填充
fontStyle.normal.textColor = new Color(1, 0, 0); //设置字体颜色
fontStyle.fontStyle = FontStyle.BoldAndItalic; // 字体加粗倾斜
fontStyle.fontSize = 18; //字体大小
GUILayout.Label(testStr, fontStyle); // 文本格式:网虫虫 不可输入、不可选 添加字体样式
GUILayout.TextField(testStr); // 文本格式:网虫虫 可输入、不可选
EditorGUILayout.LabelField("姓名:", testStr); // 文本格式: 姓名:网虫虫 不可输入、不可选
testStr = EditorGUILayout.TextField("姓名:", testStr); // 文本格式:姓名:网虫虫 可输入、不可选
testInt = EditorGUILayout.IntField("IntField:", testInt);
testFloat = EditorGUILayout.FloatField("FloatField:", testFloat);
testStr = GUILayout.TextArea(testStr, GUILayout.Height(40)); // 区域输入文本
EditorGUILayout.SelectableLabel(testStr); // 可选择文本
testStr = GUILayout.PasswordField(testStr, "*"[0]);
testStr = EditorGUILayout.PasswordField("密码:", testStr);
floatSlider = EditorGUILayout.Slider(floatSlider, 1, 100);
EditorGUILayout.MinMaxSlider(ref minValue, ref maxValue, -100, 100);
testBool = GUILayout.Toggle(testBool, "开关");
testBool = EditorGUILayout.Toggle("开关:", testBool);
toolbarOption = GUILayout.Toolbar(toolbarOption, toolbarStr);
switch (toolbarOption)
{
case 0:
GUILayout.Label("1111111111111111111");
break;
case 1:
GUILayout.Label("2222222222222222222");
break;
case 2:
GUILayout.Label("3333333333333333333");
break;
}
EditorGUILayout.Space(); // 空一行
enumTest = (EnumTest)EditorGUILayout.EnumPopup("Enum类型Popup:", enumTest);
enumTest2 = (EnumTest)EditorGUILayout.EnumMaskField("Enum枚举多选:", enumTest2);
enumInt = EditorGUILayout.Popup("String类型Popup:", enumInt, names);
selectedSize = EditorGUILayout.IntPopup("Int类型Popup: ", selectedSize, names, sizes);
tagStr = EditorGUILayout.TagField("选择Tag:", tagStr);
layerInt = EditorGUILayout.LayerField("选择Layer:", layerInt);
maskInt = EditorGUILayout.MaskField("数组多选:", maskInt, names);
testColor = EditorGUILayout.ColorField("颜色:", testColor);
GUI.backgroundColor = Color.magenta; // 修改背景颜色
testVector3 = EditorGUILayout.Vector3Field("Vector3坐标:", testVector3);
GUI.backgroundColor = Color.green;
testRect = EditorGUILayout.RectField("Rect尺寸:", testRect);
GUI.backgroundColor = Color.gray * 1.8f; // 恢复背景默认颜色
gameObject = (GameObject)EditorGUILayout.ObjectField("任意类型 举例GameObject:", gameObject, typeof(GameObject));
texture = EditorGUILayout.ObjectField("任意类型 举例贴图", texture, typeof(Texture), true) as Texture;
GUILayout.BeginHorizontal();
GUILayout.Label("横向自动排列演示:");
testStr = GUILayout.PasswordField(testStr, "*"[0]);
testBool = GUILayout.Toggle(testBool, "开关");
GUILayout.Button("按钮");
GUILayout.EndHorizontal();
if (GUILayout.Button("点击按钮 弹出系统提示消息"))
ShowNotification(new GUIContent("这是网虫虫提示消息~~"));
if (GUILayout.Button("点击按钮 显示滚动视图"))
isShowScrollView = !isShowScrollView;
if (isShowScrollView)
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition);
for (int i = 0; i < 100; i )
{
GUILayout.Label(i.ToString());
}
GUILayout.EndScrollView();
}
if (GUILayout.Button("点击按钮 显示二级窗口"))
secondWindow = !secondWindow;
if (secondWindow)
{
GUI.enabled = true;
BeginWindows();
secondWindowRect = GUILayout.Window(1, secondWindowRect, SecondWindow, "二级窗口");
EndWindows();
}
if (GUILayout.Button("点击按钮 绘制图形"))
secondWindow2 = !secondWindow2;
if (secondWindow2)
{
GUI.backgroundColor = Color.red / 2; // 修改背景颜色
GUI.enabled = true;
BeginWindows();
secondWindowRect2 = GUILayout.Window(2, secondWindowRect2, SecondWindow2, "绘制图形");
EndWindows();
}
GUI.backgroundColor = Color.gray * 1.8f; // 恢复背景默认颜色
GUI.enabled = false;
GUILayout.Button("置灰按钮");
GUI.enabled = true;
}
Rect secondWindowRect = new Rect(0, 0, 400, 400);
bool secondWindow = false;
void SecondWindow(int unusedWindowID)
{
Application.targetFrameRate = EditorGUILayout.IntSlider("限定帧率:", Application.targetFrameRate, 10, 300);
Application.runInBackground = EditorGUILayout.Toggle("允许Unity后台运行:", Application.runInBackground);
gameObject = (GameObject)EditorGUILayout.ObjectField("当前选中的物体:", Selection.activeGameObject, typeof(GameObject));
EditorGUILayout.Vector3Field("鼠标在Scene视图的坐标:", mousePosition);
EditorGUILayout.Vector3Field("鼠标在当前二级窗口坐标:", Event.current.mousePosition);
hitGo = (GameObject)EditorGUILayout.ObjectField("鼠标发送射线:", hitGo != null ? hitGo : null, typeof(GameObject));
GUILayout.Label("UsedTextureCount: " UnityStats.usedTextureCount);
GUILayout.Label("UsedTextureMemorySize: " (UnityStats.usedTextureMemorySize / 1000000f "Mb"));
GUILayout.Label("RenderTextureCount: " UnityStats.renderTextureCount);
GUILayout.Label("FrameTime: " UnityStats.frameTime);
GUILayout.Label("RenderTime: " UnityStats.renderTime);
GUILayout.Label("DrawCalls: " UnityStats.drawCalls);
GUILayout.Label("Batchs: " UnityStats.batches);
GUILayout.Label("Static Batch DC: " UnityStats.staticBatchedDrawCalls);
GUILayout.Label("Static Batch: " UnityStats.staticBatches);
GUILayout.Label("DynamicBatch DC: " UnityStats.dynamicBatchedDrawCalls);
GUILayout.Label("DynamicBatch: " UnityStats.dynamicBatches);
GUILayout.Label("Triangles: " UnityStats.triangles);
GUILayout.Label("Vertices: " UnityStats.vertices);
if (GUILayout.Button("关闭二级窗口"))
secondWindow = false;
GUI.DragWindow();//画出子窗口
}
Rect secondWindowRect2 = new Rect(0, 0, 400, 400);
bool secondWindow2 = false;
int capSize = -50;
Vector3 capEuler = new Vector3(200, 200, 200);
void SecondWindow2(int unusedWindowID)
{
capSize = EditorGUILayout.IntField("尺寸:", capSize);
capEuler = EditorGUILayout.Vector3Field("testVector3:", capEuler);
if (GUILayout.Button("关闭绘制图形"))
secondWindow2 = false;
Handles.color = Color.red;
Handles.DrawLine(new Vector2(75, 100), new Vector3(150, 200));
Handles.CircleCap(1, new Vector2(300, 150), Quaternion.identity, capSize);
Handles.color = Color.green;
Handles.SphereCap(2, new Vector2(100, 250), Quaternion.Euler(capEuler), capSize);
Handles.CubeCap(3, new Vector2(300, 250), Quaternion.Euler(capEuler), capSize);
Handles.color = Color.blue;
Handles.CylinderCap(4, new Vector2(100, 350), Quaternion.Euler(capEuler), capSize);
Handles.ConeCap(5, new Vector2(300, 350), Quaternion.Euler(capEuler), capSize);
GUI.DragWindow();//画出子窗口
}
private void OnEnable()
{
SceneView.onSceneGUIDelegate = SceneGUI;
}
private void OnDisable()
{
SceneView.onSceneGUIDelegate -= SceneGUI;
}
GameObject hitGo;
Vector3 mousePosition;
void SceneGUI(SceneView sceneView)
{
if (Event.current.type == EventType.mouseMove)
{
mousePosition = Event.current.mousePosition;
RaycastHit hit;
Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
if (Physics.Raycast(ray, out hit))
{
hitGo = hit.collider.gameObject;
}
else
hitGo = null;
}
}
}
