unity

UnityEditor研究学习之EditorWindow

僤鯓⒐⒋嵵緔 提交于 2019-12-03 15:25:52
UnityEditor研究学习之EditorWindow 在unity使用过程中,其实我们都是在各个不同功能的Window下工作。 比如在Scene窗口中操作物体,在Inspector中操作物体属性,在Game视窗中观察游戏状态。 所以窗口是Unity的灵魂,这是唯一接口我们能够通过它来制作游戏。 那么,我们想自定义一个自己的窗口,那该如何呢?今天我们就来学习下EditorWindow,由于这个类在UnityEdior下,所以要using UnityEditor; 1 2 3 4 5 6 7 8 9 10 11 12 using UnityEngine; using System.Collections; using UnityEditor; //注意要引用 public class MyWindow: EditorWindow { [MenuItem( "Window/MyWindow" )] //在unity菜单Window下有MyWindow选项 static void Init() { MyWindow myWindow = (MyWindow)EditorWindow.GetWindow( typeof (MyWindow), false , "MyWindow" , true ); //创建窗口 myWindow.Show(); //展示 } }

unity编辑器扩展

一曲冷凌霜 提交于 2019-12-03 15:25:41
01:添加自己的工具 以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用了在UnityEditor命名空间中的类或方法,它必须被放在名为Editor的文件夹中。Editor文件夹中的脚本不会在build时被包含。 在项目中可以有多个Editor文件夹。 注意:如果在普通的文件夹下,Editor文件夹可以处于目录的任何层级。如果在特殊文件夹下,那Editor文件夹必须是特殊文件夹的直接子目录。 1.必须是放在 Assets / Editor 文件夹下的类,且使用了 using UnityEditor 2.调用的函数必须是静态函数(static) MenuItem菜单项 MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单。 (该属性把任意静态函数变为一个菜单命令。仅静态函数能使用这个MenuItem属性。) MenuItem是编辑器类,所以技能导入 using UnityEditor; 命名空间 且一般我们的类也不是集成自MonoBehaviour的,而是集成ScriptableObject using UnityEngine; using UnityEditor; // public class Tools { [MenuItem("Tools/Test")] public static void Test() { Debug

[Unity编辑器] 自定义资源

谁都会走 提交于 2019-12-03 15:25:31
using UnityEngine; using UnityEditor; using System.IO; public class CustomAssets<T> : ScriptableObject { static string configPath = string.Format("Assets/Main/{0}.asset", typeof(T).ToString()); public T m_list; [MenuItem("ArgsList/CreateArgsList")] static void CreateArgsList() { if (!File.Exists(configPath)) CreateAsset(); } public static void CreateAsset() { //将对象实例化 ScriptableObject so = ScriptableObject.CreateInstance(typeof(global::T)); if (so == null) { Debug.Log("该对象无效,无法将对象实例化"); return; } string path = Application.dataPath + "/Main"; //判断该路径是否存在,不存在的话创建一个 if (Directory.Exists(path) ==

Unity3d 编写编辑器自定义插件

亡梦爱人 提交于 2019-12-03 15:25:07
Unity3D的运行时和编辑器类分别存储在不同的Assemblies里:UnityEngine和UnityEditor。由于编辑器插件是独立于游戏之外的,因此需要在assets文件夹下建立Editor目录来存放自定义插件的代码。需要注意的是Editor文件夹是被编辑器智能识别的,可以是其他文件夹的子文件夹,并且可以存在多个,这样就给我们安排文件结构提供了便利。注意游戏中的脚本是不能访问Editor文件夹下的代码的。 准备开始编写编辑器之前,需要using UnityEditor来导入编辑器的名称空间。顺便一说,Editor文件夹下的代码应该也是在这个名称空间里的。 如何开启自定义插件窗口 一般的插件都是需要交互窗口的(也有不需要的),一般写一个静态方法打开插件窗口,并在该静态方法前加上编辑器自定义的几种特性之一,进入的方法有有以下两种: [MenuItem(path)]:告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数。触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口。代码里可以访问到当前选中的内容(通过Selection类),并据此来确定显示视图。 [ContextMenu(“path”)]:可以向你的上下文菜单中添加一个菜单项,点击该菜单项时显示视图。 如何编辑自定义插件窗口 编写自定义的窗口界面

在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 Editor 基础篇(六):Property Drawers自定义属性绘图

被刻印的时光 ゝ 提交于 2019-12-03 15:15:05
源地址:http://gad.qq.com/article/detail/33468 本篇文章会给大家介绍下Property Drawers自定义属性绘图,创建一个新的工程或者用上一篇的工程都可以,然后在Scripts文件夹中创建两个C#脚本,分别命名为:“Persion.cs”和“ShowPersionInfo.cs”,如下图所示: 然后在Editor文件夹中创建一个名为“PersionPropertiesDrawer.cs”的脚本,具体如下图所示: 首先,打开我们得“Persion.cs”脚本,为其添加如下代码: 这段代码不用解释了吧,就是一个普通得类和枚举。接下来为我们的“ShowPersionInfo.cs”脚本添加如下代码: 为什么要这样呢?相信大伙们都知道,要想给一个游戏对象挂上脚本,那么该脚本就必须继承自 MonoBehaviour 。大伙们可以将“Persion.cs”挂到游戏对象上,便会出现如下图所示: 所以“ShowPersionInfo.cs”仅仅就是一个辅助类,作用就是将我们的“Persion.cs”能挂到游戏对象上。 好了,接下来让我们创建一个空的游戏对象,并且命名为“Persion”,然后为其添加“ShowPersionInfo.cs”脚本: 咦,克森,你坑我?这什么都没有啊!!原来,我们漏掉了一段代码,接下来让我们为其补上: 原来呀

unity属性面板值的显示和隐藏

给你一囗甜甜゛ 提交于 2019-12-03 15:13:59
Serialize功能 Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系。 简单的说,在没有自定义Inspector的情况下所有显示在Inspector 中的属性都同时具有Serialize功能。 换句话说,就是你在Inspector看到什么,保存游戏的时候,这些值就会被保存成二进制文件。 本文说说可被Serialize的变量的定义方法 1. public 变量 在没有加入任何Attribute的前提下,public变量是默认被视为可以被Serialize的。所以public声明的变量在Inspector面板中是可见的。 public int MaxExp; 2. [SerializeField] Attribute 强制unity去序列化一个私有域 这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,这个时候可以使用[SerializeField]这个Attribute: [SerializeField] protected int foobar = 0; 注意: 这样定义出的成员变量也是会在Inspector中显示出来。 在Unity最新的UI系统中,UI属性上方全部添加[SerializeField] ,如下所示

【Unity】UGUI Image组件检视面板编辑器扩展(ImageEditor类)

你离开我真会死。 提交于 2019-12-03 15:13:08
问题描述 说到Unity的检视面板编辑器扩展,相信大家都不会陌生。但是当你尝试用同样的方式去扩展UGUI的组件时,会发现根本没有效果。 解决方案 这个问题的解决方案有两个关键点: 用继承的方式避开同系统编辑器扩展的冲突 所扩展的编辑器类要继承ImageEditor类而不是Editor类 测试版本 Unity 2017.1.1 f1 前提条件 由于所要使用的ImageEditor类所在命名空间为UnityEditor.UI,而这个命名空间并不能直接敲出来。Unity一边的错误提示是程序集引用错误。这是一个坑点。 解决方法:需要手动将Unity安装路径Unity\Editor\Data\UnityExtensions\Unity\GUISystem\Editor 下的UnityEditor.UI.dll文件拷贝到当前项目的Assets文件加下。 源代码 // MyImage.cs using UnityEngine; using UnityEngine.UI; public class MyImage : Image // 继承Image类 { } // MyImageEditor.cs using UnityEditor; using UnityEngine; using UnityEditor.UI; [CustomEditor(typeof(MyImage))] //