转载:http://mp.weixin.qq.com/s/-zvUnISuugjaLwW2i0G3Ig
Unity最强大的地方之一是它扩展性非常强的编辑器。Unite Europe 2016上有一个视频专门讲编辑器编程的:这里大概记录一下里面的关键点。
场景一
关注点:
1、绘制重要区域,Gizmos.DrawXXX
2、OnDrawGizmos和OnDrawGizmosSelected回调函数
3、点击Gizmos按钮就可以在Game视图也看到线框了
场景二
关注点:
组织面板上的参数,添加滑动条、Header、空白等
注意到上面面板的最小面有个Camera Height,调节它可以改变摄像机的高度。这个改变是可以发生在编辑器模式下的,而且也不需要脚本添加ExecuteInEditor。这是通过实现自定义的Editor脚本来实现的:
场景三
关注点:
1、自定义绘制List对象
2、使用serializedObject来修改参数的话Unity会自动有各种帮助函数,例如自动添加Undo功能
3、如果直接修改参数的话,需要使用EditorUtility.SetDirty来告诉Unity需要保存数据
4、BeginChangeCheck()和EndChangeCheck()会检测它们之间的GUI有没有被修改,如果修改了的话可以据此修改参数
5、Undo.RecordObject可以为下一步修改添加Undo/Redo
6、EditorUtility.DisplayDialog可以打开内置对话框
[图片上传中。。。(6)]
1、首先在面板上隐藏默认的List绘制方法,使用HideInInspector隐藏属性:
2、为了让PistonState可以显示在面板上,需要序列化PistonState:
3、实现自定义的绘制方程:
DrawDefaultInspector:先绘制默认的,DrawStatesInspector:自定义绘制面板函数。
4、DrawState函数:
场景四
关注点:
实现了一个可以在编辑器状态下预览效果的编辑器窗口
为了在编辑器状态下可以查看到cube的运动,我们还需要实现OnDrawGizmos来绘制一些线框表示运动。原理就是使用PreviewTime.Time来控制运动。
场景五
关注点:
在Scene视图中,鼠标的位置绘制特定的Handle
场景六
关注点:
在Scene视图绘制自定义的工具条
场景七
关注点:
1、可以在场景六的基础上,点击相应按钮后增加或删除Cube
2、新的编辑器脚本逻辑和场景七类似,重点在于回调函数OnSceneGUI:
[图片上传中。。。(17)]
场景八
关注点:
使用Scriptable Object把一些Prefab预览在Scene视图上
Scriptable Object是一个相当于自定义Assets对象的类。下面是LevelBlocks的定义。它包含了一个LevelBlockData的数组来存储可选的Prefab对象。
我们之后就可以在Hierency视图创建一个LevelBlock资源,Editor类则会加载这个资源来得到相应的数据。
6G%5JU`U$}3{$XK@}I9S%Q8.png
网友评论