编辑器

【Unity】编辑器小教程

我与影子孤独终老i 提交于 2019-12-03 14:02:41
写在前面 Unity最强大的地方之一是它扩展性非常强的编辑器。Unite Europe 2016上有一个视频专门讲编辑器编程的: https://www.youtube.com/watch?v=9bHzTDIJX_Q 这里大概记录一下里面的关键点。 场景一 关注点 : 绘制重要区域,Gizmos.DrawXXX OnDrawGizmos和OnDrawGizmosSelected回调函数 点击Gizmos按钮就可以在Game视图也看到线框了 // OnDrawGizmos()会在编辑器的Scene视图刷新的时候被调用 // 我们可以在这里绘制一些用于Debug的数据 void OnDrawGizmos() { Gizmos.color = new Color( 1f , 0f , 0f , 1f ); Gizmos.DrawWireCube( transform.position + BoxCollider.center, BoxCollider.size ); Gizmos.color = new Color( 1f , 0f , 0f , 0.3f ); Gizmos.DrawCube( transform.position + BoxCollider.center, BoxCollider.size ); } // OnDrawGizmosSelect(

Unity编辑器扩展-点击Projec视图的图片就赋给当前选中的Image节点

雨燕双飞 提交于 2019-12-03 14:02:15
我所知道的,UGUI给Image赋上图片的方式有二:一是把图片拉去Image的监视器的Source Image处,一是在点其小圆点弹出选择图片的界面。两种方式我都觉得有点麻烦,我想如果我已经选中某Image节点了,这时再点击Project视图的图片时就要给我赋上该图,效果如下: 实现思路: Selection.selectionChanged这个事件是Unity编辑器几个视图选中的东西变更时会触发的,其中Selection.activeObject就是当前选中的资源,可以是图片、prefab、GameObject等,我们可以用个字段存放上次点击的GameObject,当当前选中的是图片资源且上次选中的是带Image组件的GameObject时,就把该图片赋值给该Image组件,代码很不多: public class SceneEditor { static Object LastSelectObj = null;//用来记录上次选中的GameObject,只有它带有Image组件时才把图片赋值给它 static Object CurSelectObj = null; [InitializeOnLoadMethod] static void Init() { Selection.selectionChanged += OnSelectChange; } static void

Unity扩展编辑器--类型3:Custom Editors

扶醉桌前 提交于 2019-12-03 14:00:29
Unity扩展编辑器--类型3:Custom Editors Custom Editors 加速游戏制作过程的关键是为哪些频繁使用的组件创建自定义的编辑器,为了举例,我们将会使用下面这个极其简单的脚本进行讲解,它的作用是始终保持一个对象注视某一点。 public class LookAtPoint : MonoBehaviour { public Vector3 lookAtPoint = Vector3.zero; void Update () { transform.LookAt (lookAtPoint); } } 这个脚本会让一个对象保持面向世界空间中的某一点,让我们做的更酷一点! 第一步是让它在编辑器里面正常工作:即使你没有测试游戏,也能让这个脚本运行。我们对它添加ExecuteInEditMode属性来做这件事。 [ExecuteInEditMode] public class LookAtPoint : MonoBehaviour { public Vector3 lookAtPoint = Vector3.zero; void Update () { transform.LookAt (lookAtPoint); } } 你可以把这个脚本加在main camera上,然后在Scene视图中拖拽相机测试一下。 Making a Custom Editor

CustomEditor 自定义预览窗

不羁的心 提交于 2019-12-03 13:53:34
using UnityEngine; using System.Collections; public class MyTextureView : MonoBehaviour { public Texture texture; } using UnityEngine; using System.Collections; using UnityEditor; // CustomEditor 自定义编辑器 // 描述了用于编辑器实时运行类型的一个编辑器类。 // 注意:这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。 // 编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。 [CustomEditor( typeof (MyTextureView))] public class MyTextureViewEditor : Editor { MyTextureView myView; void OnEnable() { myView = target as MyTextureView; } // 重载是否有预览窗口 public override bool HasPreviewGUI() { return true ; } // 自定义预览窗 public

Unity 编辑器之Inspector面板编辑

别说谁变了你拦得住时间么 提交于 2019-12-03 13:50:19
编辑器有很多类: 编辑器类 。例如:EditorGUI(编辑器界面), EditorGUILayout(编辑器界面布局), EditorGUIUtility(编辑器界面工具)等等这些,都是编辑器对界面进行编辑。 EditorGUILayout 编辑器界面布局 界面的相关事件机制总共有9个: 1.public void OnGUI() ->绘制窗口 2.public void Update() ->刷新方法,100次/秒 3.public void OnInspectorUpdate() ->刷新方法,比Update()少 4.public void OnSelectionChange() ->选择一个对象 5.public void OnDestroy ->销毁窗口 6.public void OnFocus() ->获得焦点 7.public void OnLostFocus() ->失去焦点 8.public void OnHierarchayChange() ->Hierarchay视图窗口文件发生改变 9.public void OnProjectChange() ->Project视图窗口文件发生改变 数据保存并及时更新的问题: 编辑Inspector属性时,我先输入数据,然后将面板上可视化的数据第一次保存,之后再改变数据,把unity项目工程关掉再重新打开

EditorWindow 类

若如初见. 提交于 2019-12-03 13:47:54
EditorWindow类,继承 ScriptableObject,用于创建一个编辑器窗口,通常用 MenuItem 打开编辑器窗口 1、Static Properties 静态属性 说明 focusedWindow (没啥用) 当前具有键盘焦点的EditorWindow实例(可以为null)(只读) mouseOverWindow (没啥用) 当前在鼠标光标下的EditorWindow实例(可以为null)(只读) public static EditorWindow focusedWindow; public static EditorWindow mouseOverWindow; 2、Properties 属性 说明 autoRepaintOnSceneChange bool类型,当场景发生变化时,窗口是否自动重新绘制 maximized bool类型,可读可写,可使编辑器窗口最大化。注意当窗口undocked的时候设置该值没有效果 maxSize / minSize Vector2类型,如果最大最小都一样的话就可以限定窗口为不可缩放 position Rect类型,x y width height….,坐标的话是屏幕空间,左上角(0,0) titleContent GUIContent类型,可以给编辑器指定icon、text、tooltip,如果使用icon

unity编辑器扩展--自定义Scene界面UI

☆樱花仙子☆ 提交于 2019-12-03 13:47:16
本文讲的是在编辑状态下,对Scene界面的一些UI操作。作用在于地编,或者把一些繁琐的东西做个编辑界面给策划自己去设计。先上效果图: 首先,在场景任意物体上挂上你的MONO脚本,具体脚本实现什么功能自行设计。 这里我们简单在灯光下面挂一个MyGraph脚本。 public class MyGraph : MonoBehaviour { public Transform cube; } 然后就是响应问题,我们怎么实现图中一点击灯光,就弹出对应的UI呢。这里需要用到[CustomEditor]和OnSceneGUI()。 我们创建一个MyGraphEditor类,它需要继承Editor,并且在开头加上[CustomEditor(typeof(MyGraph))]。 using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; [CustomEditor(typeof(MyGraph))] public class MyGraphEditor : Editor { private bool _linkMode; private MyGraph m_graph; private Transform cube; private

Unity 自定义编辑器窗口的使用

六月ゝ 毕业季﹏ 提交于 2019-12-03 13:46:44
Unity 自定义编辑器窗口功能强大,可以实现所有希望实现的功能。我在近期的项目中仿照魔兽争霸3开发了一套简单的游戏单位功能组件,其中包括单位数据、移动方式、动画播放、武器系统等等。如果用传统的Inspector来修改各项属性十分不方便,所以实现一个简单直观的自定义编辑器窗口来进行属性管理成了一个很好的选择。 创建自定义编辑器窗口并将每一项属性显示出来是十分简单的,我们只需要通过Selection.activeGameObject 来获取当前选中的物体,并在从该物体上获取相关的脚本就可以进行属性的读取。但是,如何将修改后的属性传递回指定物体并保存起来呢? 我的第一想法是通过直接访问物体上的脚本这种方法来赋值,下面将举一个简单的例子。 假设我的单位系统的移动组件命名为 MovementController 其中speed属性为移动速度,我在自定义窗口的类中写如下代码: MovementController mc = Selection .activeGameObject .GetComponent <MovementController>() ; if (mc != null) { mc .speed = EditorGUILayout .FloatField (new GUIContent( "Speed" ), mc .speed ) ; } 这些代码完成了获取组件和赋值的功能

博客园Markdown编辑器

浪尽此生 提交于 2019-12-03 12:04:58
本文主要尝试在博客中写公式的功能。 1、本文参考了: https://www.cnblogs.com/douzujun/p/10356136.html 2、后台 选项 中开启 启用数学公式支持 功能。 3、Markdown编辑器 这是一级标题 1 数学公式 1.1 行间公式 \[ E=mc^2 \tag{1} \] \[ E=\frac{1}{n}\sum_{i=0}^{n}[h(\boldsymbol{x}_i)-y_i]^2 \tag{2} \] 1.2 行内公式 行内公式 \(E=mc^2\) 2 代码 2.1 行内代码 这是行内代码 #include <cmath> 2.2 多行代码 #include <vector> using std::vector; 来源: https://www.cnblogs.com/xikeguanyu/p/11296665.html

安装vim编辑器

女生的网名这么多〃 提交于 2019-12-03 12:04:05
借助下方网址: 安装jdk1.8 https://blog.csdn.net/weixin_42266606/article/details/80863781 安装mysql https://blog.csdn.net/weixin_42266606/article/details/80879571 安装Redis: https://www.cnblogs.com/zuidongfeng/p/8032505.html 安装vim编辑器 https://www.cnblogs.com/qianxiaoruofeng/p/5778733.html 来源: https://www.cnblogs.com/zjc364259451/p/11795463.html