Unity3D 场景编辑器扩展学习笔记-EditorWindow
今天可以说是有点成果了,可喜可贺~先上图
本节内容涉及到的类: EditorWindow, Physics, Handles, Camera, SceneView.
Editor类虽然可以使用OnSceneGUI来进行Scene视图里的各种定制操作,但是只能针对特定类型的脚本进行。如果想实现种怪这种编辑器常见需求,实现起来超级别扭。我尝试着基于Editor类来实现这个操作,发现除了在Inspector里锁住当前组件的视图外,没什么好方法了:创建一个空对象,放一个特定的类,实现一个特定的Editor,再每次编辑场景数据时手动锁定Inspector....想想都吐血了。
因此不可避免的寻求其他解决方案:EditorWindow
EditorWindowNamespace: UnityEditor
Parent class: ScriptableObject
Derive from this class to create an editor window.
关于EditorWindow的使用,U3D还是有一些基本例子的,今天我要谈的是关于SceneView的操作。
SceneView.onSceneGUIDelegate 该函数为定制提供了可能性,上代码先。
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Text;public class SceneEditorWindow : EditorWindow {RaycastHit _hitInfo;SceneView.OnSceneFunc _delegate;static SceneEditorWindow _windowInstance;[MenuItem("Window/Scene Editor #`")]static void Init(){if(_windowInstance == null){_windowInstance = EditorWindow.GetWindow(typeof(SceneEditorWindow)) as SceneEditorWindow;_windowInstance._delegate = new SceneView.OnSceneFunc(OnSceneFunc);SceneView.onSceneGUIDelegate += _windowInstance._delegate;}}void OnEnable(){}void OnDisable(){}void OnDestroy(){if (_delegate != null){SceneView.onSceneGUIDelegate -= _delegate;}}void OnGUI(){}void OnInspectorGUI(){Debug.Log("OnInspectorGUI");}static public void OnSceneFunc(SceneView sceneView){_windowInstance.CustomSceneGUI(sceneView);}void CustomSceneGUI(SceneView sceneView){Camera cameara = sceneView.camera;Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);if (Physics.Raycast(ray, out _hitInfo, 10000, -1)){//Debug.DrawRay(ray.origin, ray.direction, Color.yellow);Vector3 origin = _hitInfo.point;origin.y += 100;if (Physics.Raycast(origin, Vector3.down, out _hitInfo)){Handles.color = Color.yellow;Handles.DrawLine(_hitInfo.point, origin);float arrowSize = 1;Vector3 pos = _hitInfo.point;Quaternion quat;Handles.color = Color.green;quat = Quaternion.LookRotation(Vector3.up, Vector3.up);Handles.ArrowCap(0, pos, quat, arrowSize);Handles.color = Color.red;quat = Quaternion.LookRotation(Vector3.right, Vector3.up);Handles.ArrowCap(0, pos, quat, arrowSize);Handles.color = Color.blue;quat = Quaternion.LookRotation(Vector3.forward, Vector3.up);Handles.ArrowCap(0, pos, quat, arrowSize);//Handles.DrawLine(pos + new Vector3(0, 3, 0), pos);}}SceneView.RepaintAll();}
}
发现没啥可讲的了。。因为有之前GUILayout和Handles的知识后,其实只需要知道一个流程性的代码就行了。
而且EditorWindow的基本使用,U3D文档里已经有很充分的例子。
有一点需要注意,SceneView.RepaintAll(); 根据观察,SceneView在没有任何操作时,FPS估计是1,鼠标移动不会触发场景重绘,但是 onSceneGUIDelegate 确是一直在调用,所以加上这个之后,操作的反馈就变成实时的了,这会带来效率损耗---如果不影响操作的话,不用管。
Unity3D 场景编辑器扩展学习笔记-EditorWindow相关推荐
- Unity3D Editor 编辑器扩展3 Editor脚本
Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...
- Unity3D之Editor扩展学习——四大名捕闹京东
Unity3D提供了强大的编辑器扩展机制,在项目开发中,如果可以将一些繁琐的工作放在编辑器扩展中进行,则会大大提高效率.本文对编辑器扩展进行了一些总结,希望对有兴趣编写编辑器扩展的开发人员有所帮助.当 ...
- Unity3D游戏开发入门学习笔记
学习内容概要: 软件面板功能.材质球.预制体.摄像机.灯光.鼠标键盘输入.组件.刚体.碰撞体.PC端游戏打包发布.... 第1课:课程介绍与Unity3D环境搭建 1.Unity3D,一个游戏开发引擎 ...
- Unity3D《打地鼠》学习笔记及心得
一.新建工程 二.创建Audio.Prefabs.Scenes.Scripts.Sprites文件夹. 三.导入图片素材到Sprites文件夹.音频素材到Audio文件夹. 1.修改图片属性为Text ...
- Vi(Linux系统下的标准编辑器)学习笔记
前言 各种操作系统都有比较友好的界面,习惯于Windows,Linux,Mac的各种操作界面的情况下,使用命令行简直太难受了 然后,为了方便对学校的hustoj进行各种加题.配spj的操作,本校的学长 ...
- Unity3D Editor 编辑器扩展2 选取物体、撤销操作和窗口小部件的显示
环境:Unity2017.2 语言:C# 总起: 今天主要介绍以下内容: 1.通过MenuCommand.Selection获取选中对象: 2.通过Undo编写可撤销的命令: 3.窗口小部件的显示. ...
- VI和VIM编辑器深入学习笔记--基本vi命令
双十一过后有点闲,找本书给这段时间碰到的一些问题充充电,先从linux vi命令开始: 移动光标: "h" 向左一个字符,"j"向下一行,"k&quo ...
- Unity UI Toolkit学习笔记-EditorWindow
- Unity 编辑器扩展 场景视图内控制对象
http://blog.csdn.net/akof1314/article/details/38129031 假设有一个敌人生成器类,其中有个属性range用来表示敌人生成的范围区域大小,那么可以用O ...
- 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
最新文章
- ASP.NET页面包含另外一个页面
- 2021-02-25 matlab 字符串和数字同时写入excel
- 成都亿佰特物联网无线数传专家:lora无线传输模块网关技术的优缺点
- python编码器下载_Python Code128编码器
- 高质量UI面试作品模板,大大提高通过效率
- Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)
- 梳理常见硬盘存储 I/O 接口相关简称
- 要用计算机处理频谱,妙用Adobe Audition 系列教程(二):频谱分析仪 | 小众声学...
- 网吧网管新人对无盘技术不熟
- 使用android sqlite读取数据库的简单方法
- 计算机职业生涯测评,皮纹检测职业版——职业生涯规划指南测评系统
- 别人笑我太疯癫 我笑他人看不穿
- iMX8模块Ubuntu移植
- linux中怎么修改用户组名,Linux 下如何修改用户名(同时修改用户组名和家目录)...
- 明明有网 但是下边显示小地球怎么办 一招解决
- GO WEB IRIS入门 安装iris
- Mac – m1安装RDM – Redis桌面管理 – RedisDesktopManager – Redis可视化
- 整理经济学人词频表(词频分割过程)
- 学校计算机教室自查报告,学校专用教室自查报告
- 实施工程师如何做好一次调研