【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】

本文主要是介绍【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GUI系列操作

    • 1.枚举菜单实现
      • 文件1:Assets/MyScript/Test1.cs
        • 代码如下:
      • 文件2:Assets/MyScript/Editor/Test1Editor.cs
        • 代码如下:
      • 测试一下
        • 新建一个场景,新建一个Empty 节点,用来测试枚举组件
        • 将文件1:Assets/MyScript/Test1.cs拖到Game Object的Inspector面板上。
        • 实现了一个简单的枚举菜单:
    • 2.Window窗口菜单实现
      • 窗口菜单实现1——显示窗口:
        • 文件:Assets/MyScript/Test2Window.cs
          • 代码如下:
        • 测试一下
          • 保存文件后,在窗口左边有"测试2/ShowWindow"菜单选项
            • 打开"测试2/ShowWindow"窗口,如下:
      • 窗口菜单实现2——弹出类型:
        • 文件:Assets/MyScript/Test3Window.cs
          • 代码如下:
        • 测试一下
          • 打开"测试2/Test3Window"窗口,如下:
      • 窗口菜单实现3——浮动工具窗口:
        • 文件:Assets/MyScript/Test4Window.cs
          • 代码如下:
          • 测试一下
            • 打开"测试2/Test4Window"窗口,如下:
    • 3.Window窗口文本与颜色
      • 文件:Assets/MyScript/Test6Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test6Window"窗口,如下:
          • 窗口文本与颜色关键字:TextField、TextArea、PasswordField和ColorField。
    • 4.Window窗口标签字段
      • 文件:Assets/MyScript/Test7Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test7Window"窗口,如下:
          • 窗口标签字段关键字:LabelField("文本输入框");和Space(20);
    • 5.Window窗口滑动条
      • 文件:Assets/MyScript/Test8Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test8Window"窗口,如下:
          • 窗口标签字段关键字:Slider、IntSlider和EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);
    • 6.Window三维四维数组
      • 文件:Assets/MyScript/Test9Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test9Window"窗口,如下:
          • 窗口标签字段关键字:Vector4Field、RectField和BoundsField
    • 7.Window标签/层和对象选择
      • 文件:Assets/MyScript/Test10Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test10Window"窗口,如下:
    • 8.Window实现Bool和折叠框
      • 文件:Assets/MyScript/Test11Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test11Window"窗口,如下:
          • Bool和折叠框实现结构:
    • 9.Window实现滑动条和禁用置灰选项
      • 文件:Assets/MyScript/Test12Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test12Window"窗口,如下:
          • 窗口右侧滑动条实现结构
          • 是否禁用置灰实现结构


1.枚举菜单实现

文件1:Assets/MyScript/Test1.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test1 : MonoBehaviour
{public Enum4 mEnum;public int mInt;public float mFloat;public string mStr;public Color mColor;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}
}public enum Enum4
{None,IntVal,FloatVal,StrVal,ColorVal
}

文件2:Assets/MyScript/Editor/Test1Editor.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;[CustomEditor(typeof(Test1),true)]
public class Test4Editor : Editor
{public SerializedObject mObj;public SerializedProperty mEnum;public SerializedProperty mInt;public SerializedProperty mFloat;public SerializedProperty mStr;public SerializedProperty mColor;public void OnEnable(){this.mObj = new SerializedObject(target);this.mEnum = this.mObj.FindProperty("mEnum");this.mInt = this.mObj.FindProperty("mInt");this.mFloat = this.mObj.FindProperty("mFloat");this.mStr = this.mObj.FindProperty("mStr");this.mColor = this.mObj.FindProperty("mColor");}public override void OnInspectorGUI(){this.mObj.Update();EditorGUILayout.PropertyField(this.mEnum);switch (this.mEnum.enumValueIndex){case 1:EditorGUILayout.PropertyField(this.mInt);break;case 2:EditorGUILayout.PropertyField(this.mFloat);break;case 3:EditorGUILayout.PropertyField(this.mStr);break;case 4:EditorGUILayout.PropertyField(this.mColor);break;}this.mObj.ApplyModifiedProperties();}
}

测试一下

新建一个场景,新建一个Empty 节点,用来测试枚举组件

在这里插入图片描述

将文件1:Assets/MyScript/Test1.cs拖到Game Object的Inspector面板上。

在这里插入图片描述

实现了一个简单的枚举菜单:

在这里插入图片描述


2.Window窗口菜单实现

窗口菜单实现1——显示窗口:

文件:Assets/MyScript/Test2Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test2Window : EditorWindow
{[MenuItem("测试2/ShowWindow")]public static void ShowWindow(){Test2Window.CreateInstance<Test2Window>().Show();}
}
测试一下
保存文件后,在窗口左边有"测试2/ShowWindow"菜单选项

如下:

在这里插入图片描述

打开"测试2/ShowWindow"窗口,如下:

在这里插入图片描述

窗口菜单实现2——弹出类型:

文件:Assets/MyScript/Test3Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test3Window : EditorWindow
{[MenuItem("测试2/Test3Window")]public static void ShowWindow(){Test3Window.CreateInstance<Test3Window>().ShowUtility();}
}
测试一下
打开"测试2/Test3Window"窗口,如下:

在这里插入图片描述

窗口菜单实现3——浮动工具窗口:

文件:Assets/MyScript/Test4Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test4Window : EditorWindow
{[MenuItem("测试2/Test4Window")]public static void ShowWindow(){Test4Window.CreateInstance<Test4Window>().ShowPopup();}public void OnGUI(){if(GUILayout.Button("关闭")){this.Close();}}
}
测试一下
打开"测试2/Test4Window"窗口,如下:

在这里插入图片描述


3.Window窗口文本与颜色

文件:Assets/MyScript/Test6Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test6Window : EditorWindow
{[MenuItem("测试2/Test6Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test6Window>().Show();}public string mText = "默认文本";public Color mColor = Color.white;public void OnGUI(){if (GUILayout.Button("关闭")){this.Close();}this.mText = EditorGUILayout.TextField(this.mText);this.mText = EditorGUILayout.TextArea(this.mText);this.mText = EditorGUILayout.PasswordField(this.mText);this.mColor = EditorGUILayout.ColorField(this.mColor);
//EditorGUILayout 后面的关键字:TextField、TextArea、PasswordField和ColorField。}
}
测试一下
打开"测试2/Test6Window"窗口,如下:

在这里插入图片描述

窗口文本与颜色关键字:TextField、TextArea、PasswordField和ColorField。

4.Window窗口标签字段

文件:Assets/MyScript/Test7Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test7Window : EditorWindow
{[MenuItem("测试2/Test7Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test7Window>().Show();}public string mText = "默认文本";public Color mColor = Color.white;public void OnGUI(){EditorGUILayout.LabelField("文本输入框");this.mText = EditorGUILayout.TextField(this.mText);EditorGUILayout.Space(20);this.mText = EditorGUILayout.TextArea(this.mText);EditorGUILayout.SelectableLabel("密码输入框");this.mText = EditorGUILayout.PasswordField(this.mText);this.mColor = EditorGUILayout.ColorField(this.mColor);}
}
测试一下
打开"测试2/Test7Window"窗口,如下:

在这里插入图片描述

窗口标签字段关键字:LabelField(“文本输入框”);和Space(20);

5.Window窗口滑动条

文件:Assets/MyScript/Test8Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test8Window : EditorWindow
{[MenuItem("测试2/Test8Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test8Window>().Show();}public int mInt;public float mFloat;public float mMinFloat;public float mMaxFloat;public void OnGUI(){EditorGUILayout.LabelField("浮点值滑动条0-100");this.mFloat = EditorGUILayout.Slider(this.mFloat, 0, 100);EditorGUILayout.Space(20);EditorGUILayout.LabelField("整数值滑动条0-100");this.mInt = EditorGUILayout.IntSlider(this.mInt, 0, 100);EditorGUILayout.Space(30);EditorGUILayout.LabelField("最小值和最大值滑动条");this.mMinFloat = EditorGUILayout.Slider(this.mMinFloat, 0, 100);this.mMaxFloat = EditorGUILayout.Slider(this.mMaxFloat, 0, 100);EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);}
}
测试一下
打开"测试2/Test8Window"窗口,如下:

在这里插入图片描述

窗口标签字段关键字:Slider、IntSlider和EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);

6.Window三维四维数组

文件:Assets/MyScript/Test9Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test9Window : EditorWindow
{[MenuItem("测试2/Test9Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test9Window>().Show();}public Vector2 mPos2;public Vector3 mPos3;public Vector4 mPos4;public Rect mRect;public Bounds mBounds;public void OnGUI(){this.mPos2 = EditorGUILayout.Vector2Field("二维数值",this.mPos2);this.mPos3 = EditorGUILayout.Vector3Field("三维数值",this.mPos3);this.mPos4 = EditorGUILayout.Vector4Field("四维数值",this.mPos4);EditorGUILayout.Space(20);EditorGUILayout.LabelField("矩阵");this.mRect = EditorGUILayout.RectField(this.mRect);EditorGUILayout.Space(20);EditorGUILayout.LabelField("间距");this.mBounds = EditorGUILayout.BoundsField(this.mBounds);}
}
测试一下
打开"测试2/Test9Window"窗口,如下:

在这里插入图片描述

窗口标签字段关键字:Vector4Field、RectField和BoundsField

7.Window标签/层和对象选择

文件:Assets/MyScript/Test10Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test10Window : EditorWindow
{[MenuItem("测试2/Test10Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test10Window>().Show();}public string mStr;public int mInt;public Object mObj1;public Object mObj2;public Object mObj3;public Object mObj4;public void OnGUI(){EditorGUILayout.LabelField("Tag");this.mStr = EditorGUILayout.TagField(this.mStr);EditorGUILayout.Space(170);EditorGUILayout.LabelField("Layer");this.mInt = EditorGUILayout.LayerField(this.mInt);EditorGUILayout.Space(150);EditorGUILayout.LabelField("Camera");this.mObj1 = EditorGUILayout.ObjectField(this.mObj1, typeof(Camera));EditorGUILayout.Space();EditorGUILayout.LabelField("Transform");this.mObj2 = EditorGUILayout.ObjectField(this.mObj2, typeof(Transform));EditorGUILayout.Space();EditorGUILayout.LabelField("Texture");this.mObj3 = EditorGUILayout.ObjectField(this.mObj3, typeof(Texture));EditorGUILayout.Space();EditorGUILayout.LabelField("Object_场景和资源的都可选");this.mObj4 = EditorGUILayout.ObjectField(this.mObj4, typeof(Object));}
}
测试一下
打开"测试2/Test10Window"窗口,如下:

在这里插入图片描述


8.Window实现Bool和折叠框

文件:Assets/MyScript/Test11Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test11Window : EditorWindow
{[MenuItem("测试2/Test11Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test11Window>().Show();}public bool mBool1;public bool mBool2;public string mStr;public int mInt;public Object mObj1;public Object mObj2;public Object mObj3;public Object mObj4;public void OnGUI(){this.mBool1 = EditorGUILayout.Toggle("是否开启", this.mBool1);if (this.mBool1){EditorGUILayout.LabelField("Tag");this.mStr = EditorGUILayout.TagField(this.mStr);EditorGUILayout.Space(20);EditorGUILayout.LabelField("Layer");this.mInt = EditorGUILayout.LayerField(this.mInt);EditorGUILayout.Space(20);EditorGUILayout.LabelField("Camera");this.mObj1 = EditorGUILayout.ObjectField(this.mObj1, typeof(Camera));}this.mBool2 = EditorGUILayout.Foldout(this.mBool2 , "是否折叠");if (this.mBool2){EditorGUILayout.Space();EditorGUILayout.LabelField("Transform");this.mObj2 = EditorGUILayout.ObjectField(this.mObj2, typeof(Transform));EditorGUILayout.Space();EditorGUILayout.LabelField("Texture");this.mObj3 = EditorGUILayout.ObjectField(this.mObj3, typeof(Texture));EditorGUILayout.Space();EditorGUILayout.LabelField("Object_场景和资源的都可选");this.mObj4 = EditorGUILayout.ObjectField(this.mObj4, typeof(Object));}}
}
测试一下
打开"测试2/Test11Window"窗口,如下:

请添加图片描述

Bool和折叠框实现结构:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test11Window : EditorWindow
{[MenuItem("测试2/Test11Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test11Window>().Show();}public bool mBool1;public bool mBool2;
...public void OnGUI(){this.mBool1 = EditorGUILayout.Toggle("是否开启", this.mBool1);if (this.mBool1){
...}this.mBool2 = EditorGUILayout.Foldout(this.mBool2 , "是否折叠");if (this.mBool2){
...}}
}

9.Window实现滑动条和禁用置灰选项

文件:Assets/MyScript/Test12Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test12Window : EditorWindow
{[MenuItem("测试2/Test12Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test12Window>().Show();}public bool mBool1;public bool mBool2;public bool mBool3;public string mStr;public int mInt;public Object mObj1;public Object mObj2;public Object mObj3;public Object mObj4;public Vector2 mPos;public void OnGUI(){this.mPos = EditorGUILayout.BeginScrollView(this.mPos);this.mBool1 = EditorGUILayout.Toggle("是否开启", this.mBool1);if (this.mBool1){EditorGUILayout.LabelField("Tag");this.mStr = EditorGUILayout.TagField(this.mStr);EditorGUILayout.Space(20);EditorGUILayout.LabelField("Layer");this.mInt = EditorGUILayout.LayerField(this.mInt);EditorGUILayout.Space(20);EditorGUILayout.LabelField("Camera");this.mObj1 = EditorGUILayout.ObjectField(this.mObj1, typeof(Camera));}this.mBool2 = EditorGUILayout.Foldout(this.mBool2, "是否折叠");if (this.mBool2){EditorGUILayout.Space();EditorGUILayout.LabelField("Transform");this.mObj2 = EditorGUILayout.ObjectField(this.mObj2, typeof(Transform));EditorGUILayout.Space();EditorGUILayout.LabelField("Texture");this.mObj3 = EditorGUILayout.ObjectField(this.mObj3, typeof(Texture));EditorGUILayout.Space();EditorGUILayout.LabelField("Object_场景和资源的都可选");this.mObj4 = EditorGUILayout.ObjectField(this.mObj4, typeof(Object));}this.mBool3 = EditorGUILayout.BeginToggleGroup("是否禁用置灰", this.mBool3);EditorGUILayout.LabelField("Tag");this.mStr = EditorGUILayout.TagField(this.mStr);EditorGUILayout.LabelField("Layer");this.mInt = EditorGUILayout.LayerField(this.mInt);EditorGUILayout.LabelField("Camera");this.mObj1 = EditorGUILayout.ObjectField(this.mObj1, typeof(Camera));EditorGUILayout.EndToggleGroup();EditorGUILayout.EndScrollView();}
}
测试一下
打开"测试2/Test12Window"窗口,如下:

请添加图片描述

窗口右侧滑动条实现结构
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class Test12Window : EditorWindow
{[MenuItem("测试2/Test12Window")]public static void ShowWindow(){EditorWindow.GetWindow<Test12Window>().Show();}public Object mObj4;public Vector2 mPos;public void OnGUI(){this.mPos = EditorGUILayout.BeginScrollView(this.mPos);//窗口右侧滑动条开始
...//中间包含的菜单EditorGUILayout.EndScrollView();//窗口右侧滑动条结束}
}
是否禁用置灰实现结构
        this.mBool3 = EditorGUILayout.BeginToggleGroup("是否禁用置灰", this.mBool3);...EditorGUILayout.EndToggleGroup();...

这篇关于【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163556

相关文章

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid = ({src,name,size,link,}: {src: any;name: any;size?: any;link?: any;}) => (<Box sx={{ display: "flex", flexDirecti