今天可以说是有点成果了,可喜可贺~先上图

本节内容涉及到的类: EditorWindow, Physics, Handles, Camera, SceneView.

Editor类虽然可以使用OnSceneGUI来进行Scene视图里的各种定制操作,但是只能针对特定类型的脚本进行。如果想实现种怪这种编辑器常见需求,实现起来超级别扭。我尝试着基于Editor类来实现这个操作,发现除了在Inspector里锁住当前组件的视图外,没什么好方法了:创建一个空对象,放一个特定的类,实现一个特定的Editor,再每次编辑场景数据时手动锁定Inspector....想想都吐血了。

因此不可避免的寻求其他解决方案:EditorWindow

EditorWindowNamespace: UnityEditor
Parent class: ScriptableObject

Description

Derive from this class to create an editor window.

Create your own custom editor window that can float free or be docked as a tab, just like the native windows in the Unity interface.

关于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相关推荐

  1. Unity3D Editor 编辑器扩展3 Editor脚本

    Unity3D Editor 编辑器扩展3 Editor脚本 环境:Unity2017.2 语言:C# 总起: 在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参 ...

  2. Unity3D之Editor扩展学习——四大名捕闹京东

    Unity3D提供了强大的编辑器扩展机制,在项目开发中,如果可以将一些繁琐的工作放在编辑器扩展中进行,则会大大提高效率.本文对编辑器扩展进行了一些总结,希望对有兴趣编写编辑器扩展的开发人员有所帮助.当 ...

  3. Unity3D游戏开发入门学习笔记

    学习内容概要: 软件面板功能.材质球.预制体.摄像机.灯光.鼠标键盘输入.组件.刚体.碰撞体.PC端游戏打包发布.... 第1课:课程介绍与Unity3D环境搭建 1.Unity3D,一个游戏开发引擎 ...

  4. Unity3D《打地鼠》学习笔记及心得

    一.新建工程 二.创建Audio.Prefabs.Scenes.Scripts.Sprites文件夹. 三.导入图片素材到Sprites文件夹.音频素材到Audio文件夹. 1.修改图片属性为Text ...

  5. Vi(Linux系统下的标准编辑器)学习笔记

    前言 各种操作系统都有比较友好的界面,习惯于Windows,Linux,Mac的各种操作界面的情况下,使用命令行简直太难受了 然后,为了方便对学校的hustoj进行各种加题.配spj的操作,本校的学长 ...

  6. Unity3D Editor 编辑器扩展2 选取物体、撤销操作和窗口小部件的显示

    环境:Unity2017.2 语言:C# 总起: 今天主要介绍以下内容: 1.通过MenuCommand.Selection获取选中对象: 2.通过Undo编写可撤销的命令: 3.窗口小部件的显示. ...

  7. VI和VIM编辑器深入学习笔记--基本vi命令

    双十一过后有点闲,找本书给这段时间碰到的一些问题充充电,先从linux vi命令开始: 移动光标: "h" 向左一个字符,"j"向下一行,"k&quo ...

  8. Unity UI Toolkit学习笔记-EditorWindow

  9. Unity 编辑器扩展 场景视图内控制对象

    http://blog.csdn.net/akof1314/article/details/38129031 假设有一个敌人生成器类,其中有个属性range用来表示敌人生成的范围区域大小,那么可以用O ...

  10. 【Unity3D编辑器扩展】Unity3D中实现Text的字体的替换

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

最新文章

  1. ASP.NET页面包含另外一个页面
  2. 2021-02-25 matlab 字符串和数字同时写入excel
  3. 成都亿佰特物联网无线数传专家:lora无线传输模块网关技术的优缺点
  4. python编码器下载_Python Code128编码器
  5. 高质量UI面试作品模板,大大提高通过效率
  6. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)
  7. 梳理常见硬盘存储 I/O 接口相关简称
  8. 要用计算机处理频谱,妙用Adobe Audition 系列教程(二):频谱分析仪 | 小众声学...
  9. 网吧网管新人对无盘技术不熟
  10. 使用android sqlite读取数据库的简单方法
  11. 计算机职业生涯测评,皮纹检测职业版——职业生涯规划指南测评系统
  12. 别人笑我太疯癫 我笑他人看不穿
  13. iMX8模块Ubuntu移植
  14. linux中怎么修改用户组名,Linux 下如何修改用户名(同时修改用户组名和家目录)...
  15. 明明有网 但是下边显示小地球怎么办 一招解决
  16. GO WEB IRIS入门 安装iris
  17. Mac – m1安装RDM – Redis桌面管理 – RedisDesktopManager – Redis可视化
  18. 整理经济学人词频表(词频分割过程)
  19. 学校计算机教室自查报告,学校专用教室自查报告
  20. 实施工程师如何做好一次调研

热门文章

  1. 科普:不给手游平台源码的公司能不能选?
  2. 黑苹果无线网卡选择intel还是博通?及其驱动方式详解
  3. ORACLE 查询表空间使用情况
  4. 计算机图形学-第一八分象限的DDA算法
  5. js读取文件的内置方法之 FileReader
  6. c++ 栈 STL的基本操作
  7. C语言编译程序的顺序,C语言函数定义顺序
  8. windows10 64位 JDK1.8 下载
  9. python 爬虫基础——淘宝评论
  10. K60学习笔记一:PORT端口