Unity Editor 编辑器开发实战
文章平均质量分 58
Unity Editor 编辑器开发实战
CoderZ1010
这个作者很懒,什么都没留下…
展开
-
Unity Development Memo - 开发备忘录
如何在Unity中实现一个项目开发备忘录。原创 2023-05-04 16:26:24 · 670 阅读 · 0 评论 -
如何在Unity中实现AStar寻路算法及地图编辑器
Unity中提供了NavMesh导航寻路的AI功能,如果项目不涉及服务端它应该能满足大部分需求,但如果涉及服务端且使用状态同步技术,可能需要服务端同时实现寻路功能,这时就需要考虑其它实现思路,而AStar寻路算法则是常使用的一种。原创 2023-03-19 23:39:31 · 3676 阅读 · 6 评论 -
ProtoEditor - 如何在Unity中实现一个Protobuf通信协议类编辑器
在Socket网络编程中,假如使用Protobuf作为网络通信协议,需要了解Protobuf语法规则、编写.proto文件并通过编译指令将.proto文件转化为.cs脚本文件,本文介绍如何在Unity中实现一个编辑器工具来使开发人员不再需要关注这些语法规则、编译指令。原创 2023-02-28 16:05:12 · 4489 阅读 · 4 评论 -
Unity Color PropertyDrawer 如何使Color编辑更加便捷
CustomPropertyDrawer 自定义Color属性绘制 使Color编辑更加便捷原创 2023-02-17 22:37:27 · 748 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- Replacer 替换器
如图所示,假如一个模型被大量的规整的摆放在场景中,当我们修改了这个模型需要替换时,需要将新模型按照如上位置进行逐个替换比较麻烦,下面介绍的工具Replacer可以很方便的进行批量替换:在Hierarchy层级窗口选中所有需要替换的模型,然后指定用来替换的模型,点击Replace进行替换工具代码如下:using UnityEditor;using UnityEngine;namespace SK.Framework{ /// <summary> ///..原创 2022-04-26 10:02:08 · 1393 阅读 · 0 评论 -
Unity & 蓝湖 关于UI工作流优化的思考(二)
背景和历史版本在下面这篇博客中查看:Unity & 蓝湖 关于UI工作流优化的思考最新版本:本文旨在让不会使用Unity的其他人员在简单了解该工具后,可以帮助研发人员搭建Unity中的UI预制体,研发人员稍作调整即可用,以减轻研发人员的工作压力。一个UI视图的预制体的制作步骤如下:1.在蓝湖中下载该视图的所有相关切图2.将下载的切图资源包解压缩后,拖入到Unity中Project窗口的Assets目录中的任一文件夹内3.选中所有切图,在Inspect.原创 2022-04-21 16:03:46 · 4050 阅读 · 3 评论 -
Unity & 蓝湖 关于UI工作流优化的思考
我们Unity项目关于UI界面制作的工作流是这样的,UI设计人员将设计好的UI界面在Adobe XD中上传至蓝湖,Unity程序猿从蓝湖中下载切图资源包导入项目工程中,根据蓝湖中的效果图、样式信息进行界面的搭建:例如这张首页UI中的第一个按钮,其图层名称为"组646",位置为(209px,605px),大小为(225px,76px)首先可以看到位置信息中的685px是指这个图层到顶部的像素大小,可以判断其位置信息是在以左上角为原点的坐标系中的,而且在Unity...原创 2022-02-23 21:56:37 · 3167 阅读 · 4 评论 -
Unity 编辑器开发实战【Editor Window】- 关于提高Proto通信协议文件生成效率的考虑
在项目中使用Protobuf作为通信协议时,需要用到protogen.exe程序将.proto文件编译成.cs文件再导入Unity工程中使用:例如我们创建一个ProtoTest.proto文件:然后编辑run.bat文件中的内容,根据.proto文件名称输入编译指令:编辑完成后,运行run.bat文件,可见编译好的ProtoTest.cs文件已经生成到指定位置:当我们有大量的.proto文件需要编译时,手动输入这些编译指令费时费力,而且容易出错,基于这样的情况,博主在Unit原创 2022-04-12 13:51:45 · 1440 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- 构建公司内部的PackageManager
Unity中的资源包管理器Package Manager为我们提供了模块、工具包的集中管理功能,可在其中下载、升级相应的资源包,本文介绍如何构建公司内部的Package Manager资源包管理器。 首先我们需要一个局域网服务器,将我们的资源包放到服务器内提供下载。构建该服务器有很多途径,可以让公司后端人员进行开发,并定制下载等相关接口,我们只需要调用接口。如果没有该条件,可以使用一些相关的软件,比如HFS,一个简易的HTTP服务器软件,下载链接:HFS ~ Http ...原创 2022-01-17 16:15:32 · 3672 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- Duplicator复制机
1.Name Duplicator:名称复制机(根据层级结构复制名称)2.Material Duplicator:材质复制机(根据层级结构复制材质)代码如下:namespace SK.Framework{ public interface IDuplicator { string InvalidatedInfo { get; } bool IsValidated(); void Duplicate(); }原创 2022-03-27 16:16:55 · 2967 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
Unity开发工作中,在Hierarchy窗口搜索栏可以通过物体名称或组件名称对场景中的物体进行搜索,但是并不能满足我们一些其它的搜索要求,例如搜索指定Tag标签的物体,或者指定Layer层级的物体,或者指定Active状态的物体,或者更为复杂的一些搜索,比如我们想找到场景中所有隐藏的、且挂有Camera组件的、且标签为MainCamera的物体,这些都无法实现。今天分享一个作者为了解决上述搜索需求而开发的Filter物体筛选器:其中Target是指需要进行筛选的所...原创 2021-08-12 14:37:23 · 3499 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- BlendShape调试工具
Skin Mesh Renderer组件编辑器本身包含BlendShape的调试滑动条,但是当数量较多想要重置时较为麻烦,下面介绍的工具添加了这些调试滑动条的同时,增加了一键重置的功能:代码如下:using UnityEngine;using UnityEditor;namespace SK.Framework{ /// <summary> /// BlendShape调试工具 /// </summary> public cl..原创 2022-03-15 10:37:39 · 2897 阅读 · 0 评论 -
Unity 编辑器开发实战【Editor Window】- Animation Clip Previewer 动画片段预览工具
通常我们把一个人物模型拖到Scene场景中后是这样的:本文制作一个在Scene窗口预览动画片段的工具,如图所示:代码如下:using UnityEngine;using UnityEditor;namespace SK.Framework{ /// <summary> /// 动画片段预览工具 /// </summary> public class AnimationClipPreviewer : EditorWi..原创 2022-03-01 17:17:48 · 3077 阅读 · 0 评论 -
Unity 编辑器开发实战【Custom Editor】- 为UI视图制作动画编辑器
为了更方便地为UI视图添加动画,将动画的编辑功能封装在了UI View类中,可以通过编辑器快速的为视图编辑动画。动画分为两种类型,一种是Unity中的Animator动画,该类型直接通过一个字符串类型变量记录动画State状态的名称即可,播放时调用Animator类中的Play方法传入该名称。另一种是DoTween动画,支持视图的移动、旋转、缩放、淡入淡出动画的编辑:首先看一下动画相关的几个类的数据结构:using System;using UnityEngine;us...原创 2022-02-18 17:49:50 · 2940 阅读 · 5 评论 -
Unity 编辑器开发实战【Custom Editor】- FSM Editor
本文介绍如何为FSM有限状态机模块实现一个自定义编辑器面板,FSM的详细代码在上一篇文章中有介绍,链接地址:在Unity中构建FSM有限状态机下面是最终效果:首先,自定义一个编辑器面板,需要用到Attribute:CustomEditor,参数传入目标类的类型,代码如下:using UnityEngine;using UnityEditor;namespace SK.Framework{ [CustomEditor(typeof(FSMMas...原创 2022-01-14 11:04:31 · 2968 阅读 · 0 评论 -
Unity 编辑器开发实战【Custom Editor】- AudioDatabase Editor 音频库编辑器
本文实现一个音频库的自定义编辑器,效果如图:开始实现之前,首先简单介绍该音频库模块,音频库类Audio Database继承自Scriptable Object类,是一个可配置的资源文件:包含的内容如下,databaseName表示该音频库的名称,outputAudioMixerGroup表示音频播放时的输出混音器组,datasets则是表示所有音频数据的列表: /// <summary> /// 音频库 /// &...原创 2022-01-15 17:27:26 · 2950 阅读 · 1 评论 -
Unity 编辑器开发实战【Create Editor】- RectTransformEditor拓展 Auto Anchors
通过Editor类中的CreateEditor方法可以实现在不改变原有编辑器布局的情况下进行拓展,下面以RectTransform组件的编辑器为例: 如图所示,我们在不改变RectTransform原有编辑器布局的情况下,添加了一个Auto Anchors功能,该功能方便我们在搭建UI时自动设置锚点。原有的编辑器布局通过CreateEditor方法来创建一个编辑器类,在OnInspectorGUI中调用其OnInspectorGUI方法即可,同时...原创 2022-02-15 09:52:20 · 2649 阅读 · 0 评论 -
Unity 编辑器开发实战【Model Importer】- 如何多选设置模型导入设置中的Material Location
模型的Import Settings中Materials部分是不支持多选进行编辑的,如图所示,如果我们选中多个模型,编辑器中会提示Material Editing is not supported on multiple selection.假如我们往工程中导入了大量模型,其默认的Location设置为Use Embedded Materials,而我们想要将其设为Use External Materials(Legacy),就需要依次选中模型、设置Location,比较耗时耗力。本文实现的原创 2022-03-22 11:58:23 · 3850 阅读 · 0 评论 -
Unity 编辑器开发实战【MenuItem】- 批量删除场景中的LOD Group,保留最高层次细节
如果场景中包含大量的LOD Group组件,我们不想要使用时,手动依次删除需要耗费大量时间,本文介绍如何编写一个批量删除场景中LOD Group组件,并且只保留最高层次细节的物体的工具。实现思路:1.使用MenuItem制作一个功能菜单;2.调用功能时,弹出窗口提醒确认删除场景中的LOD Group组件;3.如果物体属于Prefab,不能进行销毁操作,因此还要确认是否进行Prefab Unpack;4.遍历场景中的所有LOD Group组件;5.遍历LOD Group中的LOD结原创 2022-03-21 16:19:26 · 2732 阅读 · 0 评论 -
Unity 编辑器开发实战【MenuItem & CONTEXT】- Image、RawImage的相互转换
1.Image转RawImage:代码如下:using UnityEditor;using UnityEngine;using UnityEngine.UI;namespace SK.Framework{ public class ImageTool : Editor { /// <summary> /// Image转RawImage /// </summary> [MenuIt原创 2022-03-18 12:04:34 · 2084 阅读 · 0 评论 -
Unity 编辑器开发实战【Scene View】- UI Selector
在Scene窗口编辑UI界面时,当重叠的UI元素较多时,很难点选想要选中的元素,UI Selector工具做了如下功能:右键时弹出一个列表,列举所有包含鼠标当前位置的RectTransform物体,在列表中选择即可选中该UI元素。实现该功能需要使用Scene View类,本人用的Unity版本是2020.3.16,该版本里显示onSceneGUIDelegate是弃用状态,使用duringSceneGui代替:using UnityEngine;usi...原创 2022-02-14 14:58:25 · 3199 阅读 · 0 评论 -
Unity 编辑器开发实战【AssetDatabase】- 获取资产的依赖项、引用项
Unity AssetDatabase类中提供了获取资产依赖项的API,如果我们想要获取某一资产被哪些资产引用,可以通过如下思路去实现:1.获取工程中的所有资产;2.遍历每一项资产,获取其依赖项列表;3.如果资产A的依赖项列表中包含资产B,则资产B被资产A引用。用到的核心API:1.根据guid获取资产路径//// 摘要:// Gets the corresponding asset path for the supplied GUID, or an empty s..原创 2022-03-28 15:40:33 · 5325 阅读 · 0 评论