编辑器

在Unity中创建编辑器Windows

非 Y 不嫁゛ 提交于 2019-12-03 15:24:44
在过去十年中,Unity一直是开发游戏的绝佳平台,为开发人员提供大量工具:渲染引擎​​,物理引擎,动画系统,音频混合器等。但是,在创建关卡或生成游戏内数据时,Unity不足,因为每个游戏都是独一无二的,需要不同种类的工具。值得庆幸的是,Unity为我们的开发人员提供了一个API,可以创建我们自己的编辑器窗口,自定义抽屉和检查器面板。在这一系列的博客文章中,我将向您展示我们如何在Gram Games中为设计师和艺术家在Unity中开发自定义编辑器。我们将首先创建一个编辑器窗口,在其中放置两个面板,然后使其可调整大小。在下一篇文章中,我们将该窗口转换为Unity自己的控制台窗口的克隆。 那么,让我们开始吧!首先,我们将创建一个空的Unity项目,并在Assets下添加一个名为Editor的文件夹。如果您在Unity中为文件夹指定某些名称,它将以特殊方式处理其内容。编辑器就是其中一个名称,此文件夹中的脚本将成为Unity自己编辑器的一部分。那么,让我们构建一个编辑器窗口脚本:进入刚刚创建的Editor文件夹,右键单击,然后选择Create - > C#Script。您也可以选择Editor Test C#Script,但我们会改变所有内容,所以它实际上并不重要。将脚本命名为ResizablePanels,然后在您喜欢的文本编辑器中打开它(在Gram Games中我们更喜欢Xamarin)

Unity应用基础之编辑器与界面

邮差的信 提交于 2019-12-03 15:24:24
本文主要介绍组成Unity编辑器界面的各窗口、功能及一些界面操作时的小技巧。 目录 引子 .... 1 概述 .... 1 创建自定义布局 .... 2 Project视图窗口 .... 4 调整资源显示模式 .... 4 资源类型 .... 5 创建资源 .... 5 搜索文件 .... 5 快捷键 .... 6 Scene 视图窗口 .... 7 场景视图导航控制 .... 7 使用方向键控制视角移动 ... 7 快速定位 .... 7 视角移动、环绕、远近聚焦 .... 8 鸟瞰模式 .... 9 使用Gizmo工具 .... 9 引子 俗话说:工欲善其事必先利其器。想要使用Unity开发出一款优秀的游戏作品,首先要熟练使用Unity编辑器。若能熟知其特性和操作技巧,在开发过程中就会如虎添翼,起到事半功倍的效果。 概述 Unity编辑器程序启动后,会进入编辑主界面。游戏开发的主要工作均在此界面中完成(脚本编辑除外)。如下图: 图1 请注意上图右上角用红线圈示的地方,这个下拉菜单可以选择编辑器界面各窗口视图的布局。例子中选择的是”default”布局,所以界面中各视图窗口的布局呈现以上样式。当然,也可以使用其他布局样式,读者可自行选择。除了”default”布局外,Unity还提供了四种默认布局样式(2 by 3 , 4 Split , Tall , Wide),如下图:

unity3D编辑器扩展

老子叫甜甜 提交于 2019-12-03 15:18:52
编辑器扩展只是在编辑项目中运行,发布出来是不会运行的。 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去。 01、使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用继承MonoBehaviour 如何删除引用(每个函数调用的次数):工具-文本编辑器 如果需要显示行号: 工具-选项-文本编辑器-C#-行号 引用命名空间:using UnityEditor; [MenuItem("Tools/test/test1")]:在菜单栏会有Tools这一栏,点击显示test,点击test显示test1 1 public class Tools { 2 [MenuItem( " Tools/test/test1 " )] 3 static void Test() // 要是静态方法,不然会出现警告 4 { 5 Debug.Log( " Test " ); // UnityEngine里面的 6 } 7 } [MenuItem("Tools/test/test2")]:test下会有两个子按钮test1、test2(但是不能完全一样,方法名也不能重复) 1 [MenuItem( " Tools/test/test1 " )] 2 static void Test() 3 { 4 Debug.Log( " Test " ); // UnityEngine 5 }

Unity inspector 编辑器

*爱你&永不变心* 提交于 2019-12-03 15:10:44
因为要处理很多模型, 所以写了个脚本, using UnityEngine; using UnityEditor; [CustomEditor(typeof(ModelInfo))] //这句的意思是, 这个编辑器是为Modelinfo的脚本而设置的. 物体挂了这个脚本之后, 就会有这个编辑界面显示 public class PlayerMaker : Editor { public override void OnInspectorGUI () { var maker= (ModelInfo)target; //获取这个物体的ModelInfo脚本 if (GUILayout.Button ("设置模型")) { maker.MakeModel (); //绘制一个按钮点击之后执行, ModelInfo的一个方法. } } } 注意的是, 在编辑器模式下, 一样是可以获取物体的tag, 修改tag, 一样可以获取脚本之类的, 可以删除脚本, 增加脚本, 都是可以的, 不过删除脚本用的是DestroyImmidiate() 这样才可以, 用GameObject.Destroy 是不可以的. 不过测试了一下发现在4.7.1 的时候, 编辑器下GameObject.DestroyImmediate(gameobject) 这样, 删掉之后, 编辑器会报错. 虽然确实是删除了 来源:

Unity Editor编辑器实用扩展

为君一笑 提交于 2019-12-03 15:10:35
1.编辑器实用方法汇总 //1.编辑器内物体查找(指定路径下搜索类型是scene/object.. ,并且名字中包含unity的文件) var mlist = new List<string>(AssetDatabase.FindAssets("unity t:scene", new string[] { "Assets/path" })); //2. 定位 EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath("filePath",typeof(UnityEngine.Object))); //3.搜集编辑器引用 AssetDatabase.GetDependencies("pathName"); EditorUtility.CollectDependencies("Objects[]"); //4.选中查找 只有Object类型好使 UnityEditor.Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets) //持续更新中... ... 2.Inspector_PopList:将指定文件目录内资源条目已pop类型展示在inspector面板中 using System; using System.Collections; using

Unity编辑器实现枚举多选

[亡魂溺海] 提交于 2019-12-03 15:09:23
简介: 在编辑器中,可以很简单的实现枚举的多选。 在脚本中自定义枚举属性 /// <summary> /// 定义多选属性 /// </summary> public class EnumMultiAttribute : PropertyAttribute { } /// <summary> /// 绘制多选属性 /// </summary> [CustomPropertyDrawer(typeof(EnumMultiAttribute))] public class EnumMultiAttributeDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { property.intValue = EditorGUI.MaskField(position, label, property.intValue , property.enumNames); } } 此时再需要多选的枚举上加上属性标签 /// <summary> /// 测试枚举 /// </summary> public enum EnumType { One, Two, Three, Four } [Header("测试枚举")]

Unity编辑器扩展-菜单项

雨燕双飞 提交于 2019-12-03 15:07:42
[TOC] Unity编辑器允许你去添加像内置菜单一样外观和行为的自定义菜单。自定义菜单对于那些经常使用的功能提供一种能从编辑器直接访问的便捷方式。在这一课程中我将对每个描述的主题提供真实的使用示例,用于说明在unity中的菜单项是如何创建和使用的。 添加菜单项 为了要在顶层工具栏中创建一个新的菜单项,你必须去创建一个编辑器脚本(在项目Editor目录下的一个脚本)。此菜单项需要是一个静态的方法且必须使用MenuItem属性来标识。例如,去添加一个你的团队和公司经常使用的命令到“Tools”菜单。 下面的示例,在Tools菜单下添加了一个“Clear PlayerPrefs”选项: using UnityEngine; using UnityEditor; public class MenuItems { [MenuItem( "Tools/ClearPlayerPrefs" )] private static void NewMenuOption () { PlayerPrefs.DeleteAll(); } } 这段代码创建了一个叫“Tools”的菜单,并在下面放置了一个叫“Clear PlayerPrefs”的菜单项。 当然我们也可以在一个现成的菜单项下面创建新的菜单项(例如:在“Windows”菜单下),也可以创建多级子菜单便于更好的组织菜单项目: using

代码获取Unity编辑器中的窗口

血红的双手。 提交于 2019-12-03 15:03:53
获取Unity编辑器中的窗口 这段时间在做编辑器相关内容,有时候需要对Unity自带的窗口做一些操作,这里就需要用代码反射EditorWindow程序集下的类型获取到窗口 代码如下 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System; using System.Linq; public class ShowAllEditorWindow : EditorWindow { static List<Type> windowTypes = new List<Type>(); static List<Type> timelineTypes = new List<Type>(); [MenuItem("Tools/ShowAllWindow")] static void ShowWindow() { ShowAllEditorWindow window = EditorWindow.GetWindow<ShowAllEditorWindow>("AllEditorWindow"); Type[] types = typeof(EditorWindow).Assembly.GetTypes(); windowTypes =

Unity Editor 编辑器扩展 十一 Inspector可排序列表

你离开我真会死。 提交于 2019-12-03 15:03:31
目录 可排序列表简单使用 可排序列表复杂使用 可排序列表简单使用 创建如下脚本并挂载到物体上: using UnityEngine; using System.Collections; public class Example1 : MonoBehaviour { [SerializeField] string [] texts; } 在Editor中创建如下脚本: using UnityEngine; using UnityEditor; using UnityEditorInternal; [CustomEditor ( typeof (Example1))] public class ExampleInspector : Editor { ReorderableList reorderableList; void OnEnable () { reorderableList = new ReorderableList (serializedObject, serializedObject.FindProperty ( "texts" )); // 绘制元素 var prop = serializedObject.FindProperty ( "texts" ); reorderableList = new ReorderableList (serializedObject,

【转】编辑器扩展的一些方式

烂漫一生 提交于 2019-12-03 15:00:19
举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Unity的Editor上进行赋值。 在Class上使用[RequireComponent]属性,就会在Class的GameObject上自动追加所需的Component。 以下是Unity官网文档中找到的所有Attribute,下面将按照顺序,逐个对这些Attribute进行说明和小的测试。 部分例子使用了Unity官方的示例。 UnityEngine AddComponentMenu 可以在UnityEditor的Component的Menu中增加自定义的项目。菜单可以设置多级,使用斜线/分隔即可。在Hierarchy中选中GameObject的时候,点击该菜单项,就可以在GameObject上追加该Component。 例如如下代码可以完成下图的效果。 [AddComponentMenu("TestMenu/TestComponet")] public class TestMenu : MonoBehaviour { } AssemblyIsEditorAssembly 汇编级属性,使用该属性的Class会被认为是EditorClass。具体用法不明。 ContextMenu 可以在Inspector的ContextMenu中增加选项。 例如,如下代码的效果 public class