您的位置:首页 > 移动开发 > Unity3D

Unity3D笔记第十八天——编辑器的拓展

2015-09-14 13:16 513 查看
Unity引擎结构

Unity引擎除了提供大部分通用功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造最适合自己游戏的辅

助工具和定制的编辑器,通过使用编辑器类(Editor Class)来进行扩展开发。

Unity Editor编辑器拓展一般用3个类: ScriptableObject、 EditorWindow、Editor

Editor文件夹

编辑器脚本需要放在Assets文件夹中的Editor文件夹下,如果没有则需要手动创建。

Editor-自定义检视视图

在游戏开发过程中,对游戏参数的调整是一项非常繁琐且耗时的工作。在Unity编辑器的各个视图中,Inspector视图可以称得上是使用频率

最高的视图之一,因为各种参数的编辑和修改都离不开Inspector视图。对于自定义的脚本组件,Unity的Inspector视图只提供了最基本的修

改编辑功能,它把所有可编辑参数一一罗列出来,但没有任何智能化的操作。如果能提高Inspector视图的编辑效率,将可以减少很多在参数

调整上花费的时间,进而提升游戏开发的效率。

需要在文件开始添加using UnityEditor;

需要在编辑器类前添加[CustomEditor(typeof( 类型名 ))]

编辑器脚本需要继承Editor类。

重写OnInspectorGUI函数

GUILayout类

GUILayout类:用于GUI自动布局的接口。

Label:创建一个自动布局的标签

Box:创建一个自动布局的box

Button:创建一个单次按钮

BeginHorizontal:开始一个水平控件的组

EndHorizontal:关闭由BeginHorizontal开始的一个组

BeginVertical:开始一个垂直控件的组

EndVertical:关闭由BeginVertical开始的一个组

EditorGUILayout类

TextField:制作一个文本字段

IntField:制作一个文本字段用于输入整数

FloatField:制作文本字段用于输入浮点值

Slider:制作一个滑动条用户可以拖动来改变值,在最小和最大值之间

IntSlider:制作一个滑动条用户可以拖动来改变一个整数值,在最小和最大值之间

ObjectField:制作一个物体字段。可以指定物体无论是通过拖拽物体或通过物体拾取器选择物体

Vector3Field:制作X , Y & Z字段用于输入Vector3

ColorField:制作一个用于选择颜色的字段

Space:在上一个控件和跟随的控件之间,制作一个小的空距

BeginToggleGroup:开始带有开关按钮的一个垂直组,在这里立即启用或禁用控件

EndToggleGroup:关闭BeginToggleGroup开始的组

BeginHorizontal:开始一个水平组并获取返回矩形

EndHorizontal:关闭一个BeginHorizontal开始的组

EditorWindow类

EditorWindow用于自行创建窗口,也支持自定义窗口布局。自定义窗口需要让脚本继承EditorWindow在设置MenuItem继承自

ScriptableObject,在UnityEditor命名空间下。

一般有3个步骤:

类SomeClass继承EditorWindow 类名即窗口名;

静态函数前加[MenuItem("dir/name")],函数体内创建窗口

SomeClass sc = (SomeClass)EditorWindow.GetWindow (typeof (SomeClass));

OnGUI函数里写窗口结构;

1.MenuItem创建自定义菜单

2.MenuItem属性允许添加菜单项到主菜单和检视面板上下文菜单。

3.MenuItem属性把任意静态函数变成为一个菜单命令。仅静态函数能使用这个MenuItem属性。

可以使用以下指定字符创建热键:% (Windows上为ctrl, OS X上为cmd), # (shift), & (alt), _ (无修改键)。热键文本必须在前

面加一个空格字符。

ScriptableWizard

ScriptableWizard: 从这个类派生来创建一个编辑器向导。

Editor GUI元素并不一定要在Inspector中。它还可以创造主观编辑器窗口,可以像任何Unity内置窗口那样一动,而且可以像在检查器中那

样使用GUI命令。最简单的方法就是使用ScriptableWizard,这很像一个对话盒。你在呈现后设定某些值,然后点击按键让其施展“魔法”。

DisplayWizard:创建一个向导

DisplayWizard.<T>:创建一个向导

OnWizardCreate:当用户在创建按钮上点击时调用

OnWizardUpdate:当向导被打开或只要用户在向导改变了某些东西时被调用

OnDrawGizmos:当向导可见时每帧调用

OnWizardOtherButton:当用户在其他按钮点击时,允许您提供一个动作

SelectionMode类:

可以用来调整Selection.GetTransforms返回的选择。

Unfiltered:返回全部的选择

TopLevel:只返回最高层次的选择

Deep:返回选择和所有子转换的选择

ExcludePrefab:不包括任何prefabs的选择

Editable:不包括任何要被修改的对象

Assets:只返回在资源目录中的资源对象

DeepAssets:如果选择包含文件夹,还包括所有资源和文件夹的子文件夹文件的层次结构

AssetDatabase 资源数据库

AssetDatabase是一个对资源进行读写和各种操作的接口。

Contains:资源中是否存在该对象

CreateFolder:创建一个新的文件夹

CreateAsset:在指定的路径新建资源

AddObjectToAsset:将objectToAdd这个对象添加到指定路径上的现有资源

GetAssetPath:返回相对于工程资源位置的路径名

ImportAsset:导入指定路径的资源

CopyAsset:复制指定路径的资源文件到一个新的路径

LoadAssetAtPath:返回在指定位置assetPath下第一个类型是type的资源对象

LoadMainAssetAtPath:指定路径加载主资源

Refresh:重新导入有更新的资源

OpenAsset:用关联的程序打开资源文件

SaveAssets:将所有未保存的资源更改写入磁盘

ExportPackage:导出assetPahtNames定义的资源到一个unitypackage里,并命名filename

ImportPackage:将packagePath下的资源包导入到当前工程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: