【unity小技巧】unity常用的编辑器扩展

文章目录

      • 1. **自定义 Inspector(Inspector 面板)**
        • 示例:
      • 2. **Editor Window(自定义编辑器窗口)**
        • 示例:
      • 3. **PropertyDrawer(自定义属性绘制)**
        • 示例:
      • 4. **菜单项(MenuItem)**
        • 示例:
      • 5. **Asset Database(资源管理)**
        • 示例:
      • 6. **Undo System(撤销操作)**
        • 示例:
      • 7. **场景 Gizmos(场景视图中显示自定义图标或标记)**
        • 示例:
      • 8. **自动化工具(脚本化任务)**
        • 示例:
      • 9. **Debugging Tools(调试工具)**
        • 示例:
      • 10. **自定义工具栏按钮**
        • 示例:
  • 完结

在 Unity 开发中,编辑器扩展是增强开发效率、定制工作流的重要工具。通过编写自定义的编辑器扩展,你可以简化复杂的任务、优化工作流程,并在 Unity 编辑器中创建自己的工具面板、按钮等。下面是一些常用的 Unity 编辑器扩展和技术:

1. 自定义 Inspector(Inspector 面板)

自定义 Inspector 让你可以更好地控制和展示 MonoBehaviour 或 ScriptableObject 上的数据。你可以通过实现 Editor 类来定制 Inspector 面板。

示例:
using UnityEditor;
using UnityEngine;[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor
{public override void OnInspectorGUI(){MyScript myScript = (MyScript)target;// 自定义显示字段EditorGUILayout.LabelField("Custom Label");myScript.health = EditorGUILayout.IntField("Health", myScript.health);// 添加自定义按钮if (GUILayout.Button("Reset Health")){myScript.health = 100;}// 绘制默认InspectorDrawDefaultInspector();}
}

2. Editor Window(自定义编辑器窗口)

自定义编辑器窗口可以让你创建独立的、功能强大的工具面板,增强项目的可操作性。例如,你可以创建一个资源管理器、调试窗口、关卡设计工具等。

示例:
using UnityEditor;
using UnityEngine;public class MyEditorWindow : EditorWindow
{[MenuItem("Window/My Custom Window")]public static void ShowWindow(){GetWindow<MyEditorWindow>("Custom Window");}private void OnGUI(){GUILayout.Label("This is a custom editor window", EditorStyles.boldLabel);if (GUILayout.Button("Do Something")){Debug.Log("Button clicked!");}}
}

3. PropertyDrawer(自定义属性绘制)

通过实现 PropertyDrawer,你可以自定义如何在 Inspector 中显示特定类型的数据。这对于自定义属性(如枚举、颜色、Vector 等)特别有用。

示例:
using UnityEditor;
using UnityEngine;public class RangeAttribute : PropertyAttribute
{public float min;public float max;public RangeAttribute(float min, float max){this.min = min;this.max = max;}
}[CustomPropertyDrawer(typeof(RangeAttribute))]
public class RangeDrawer : PropertyDrawer
{public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){RangeAttribute range = (RangeAttribute)attribute;EditorGUI.Slider(position, property, range.min, range.max, label);}
}

4. 菜单项(MenuItem)

MenuItem 可以让你在 Unity 编辑器菜单中添加自定义选项,方便执行自定义功能。可以为编辑器菜单添加快捷键。

示例:
using UnityEditor;
using UnityEngine;public class MyEditorMenu : Editor
{[MenuItem("Tools/Print Hello %#h")]  // 快捷键Ctrl+Shift+Hprivate static void PrintHello(){Debug.Log("Hello, Unity!");}
}

5. Asset Database(资源管理)

Unity 的 AssetDatabase 提供了强大的 API 用于管理和操作资源(如创建、删除、导入资源等)。你可以使用它来实现批量操作资源,例如批量更改材质、模型或纹理等。

示例:
using UnityEditor;
using UnityEngine;public class AssetManager : EditorWindow
{[MenuItem("Tools/Batch Rename Textures")]public static void BatchRenameTextures(){string[] textures = AssetDatabase.FindAssets("t:Texture", new string[] { "Assets/Textures" });foreach (string guid in textures){string assetPath = AssetDatabase.GUIDToAssetPath(guid);Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);string newName = "New_" + texture.name;AssetDatabase.RenameAsset(assetPath, newName);}AssetDatabase.SaveAssets();}
}

6. Undo System(撤销操作)

使用 Undo 类,你可以让编辑器的操作支持撤销功能。Unity 本身已经内置了撤销功能,但你也可以自定义一些操作来与撤销功能兼容。

示例:
using UnityEditor;
using UnityEngine;public class UndoExample : MonoBehaviour
{private void Start(){Undo.RecordObject(this, "Change Position");transform.position = new Vector3(0, 5, 0);}
}

7. 场景 Gizmos(场景视图中显示自定义图标或标记)

你可以通过 Gizmos 在场景视图中绘制自定义标记,比如显示敌人、道具的位置,或绘制调试信息。

示例:
using UnityEditor;
using UnityEngine;public class CustomGizmos : MonoBehaviour
{private void OnDrawGizmos(){Gizmos.color = Color.red;Gizmos.DrawSphere(transform.position, 0.5f); // 在物体位置绘制一个红色的球体}
}

8. 自动化工具(脚本化任务)

通过编写脚本化任务(例如批量导入、导出、构建管理等),你可以提高开发效率。比如,每次修改某个资源时自动进行一些操作,或者批量替换场景中的某些元素。

示例:
using UnityEditor;
using UnityEngine;public class BuildScript : EditorWindow
{[MenuItem("Tools/Build Project")]public static void BuildProject(){string[] levels = { "Assets/Scenes/MainScene.unity" }; // 需要构建的场景BuildPipeline.BuildPlayer(levels, "Build/ProjectBuild.exe", BuildTarget.StandaloneWindows, BuildOptions.None);}
}

9. Debugging Tools(调试工具)

自定义的调试工具,比如日志输出、性能计数器等,可以帮助你在开发过程中更高效地找到问题并进行优化。

示例:
using UnityEditor;
using UnityEngine;public class Debugger : EditorWindow
{[MenuItem("Window/Debugger")]public static void ShowWindow(){GetWindow<Debugger>("Debugger");}private void OnGUI(){GUILayout.Label("Custom Debugger", EditorStyles.boldLabel);if (GUILayout.Button("Start Debugging")){Debug.Log("Debugging started...");}}
}

10. 自定义工具栏按钮

你可以在 Unity 编辑器的工具栏中添加自定义按钮,执行特定的操作,提升工作效率。

示例:
using UnityEditor;
using UnityEngine;[InitializeOnLoad]
public class ToolbarButton
{static ToolbarButton(){// 注册按钮EditorApplication.update += OnEditorUpdate;}private static void OnEditorUpdate(){if (GUILayout.Button("Custom Action")){Debug.Log("Button pressed!");}}
}

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

5G CPE与4G CPE的主要区别有哪些

什么是CPE&#xff1f; CPE是Customer Premise Equipment&#xff08;客户前置设备&#xff09;的缩写&#xff0c;也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备&#xff0c;用于连接用户…

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…

已阻止加载“http://localhost:8086/xxx.js”的模块,它使用了不允许的 MIME 类型 (“text/plain”)。

记录今天解决的一个小bug 在终端启动8080端口号监听后&#xff0c;打开网址http://localhost:8080&#xff0c;发现不能正确加载页面&#xff0c;打开检查-控制台&#xff0c;出现如下警告&#xff1a;已阻止加载“http://localhost:8086/xxx.js”的模块&#xff0c;它使用了不…

unity3d——基础篇小项目(开始界面)

示例代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class BeginPanel : BasePanel<BeginPanel> {public UIButton btnBegin;public UIButton btnRank;public UIButton btnSetting;public UIButton btnQuit; …

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测 目录 时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测&#xff08;完整源…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构&#xff08;CA&#xff09;&#xff0c;旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

丹摩征文活动|基于丹摩算力Llama3.1实现私有化部署的Chatbot

一、简介 Llama 3.1 模型介绍 Llama 3.1 是一种大型的、开源的语言生成模型&#xff0c;类似于OpenAI的GPT-3&#xff0c;但它是由Meta&#xff08;前Facebook&#xff09;推出的。Llama 3.1具备强大的自然语言处理能力&#xff0c;可以执行各种语言任务&#xff0c;如对话生…

ssm168基于jsp的实验室考勤管理系统网页的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;实验室考勤管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实验室考勤管…

(动画)Qt控件 QLCDNumer

文章目录 LCD Number1. 介绍2. 核心属性3 . 代码实现:倒计时1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数3. 修改 widget.cpp, 在构造函数中初始化 QTimer4. 修改 widget.cpp, 实现 updateTime 4. 动…

【线程】Java多线程编程

【线程】Java多线程编程 一、前言一个最简单的多线程编程示例可以使用的工具 二、创建线程的方式三、Thread类中重要的属性和方法3.1 构造方法3.2 常见属性 一、前言 当有多个线程的时候&#xff0c;这些线程的执行顺序是不确定的。这一点&#xff0c;是我们之前提到的操作系统…

Java技术复习提升 11 常用类

第11章 常用类 1 包装类 不同包装类都继承自Object类 Serialiazble接口表示该类表示序列化 Comparable接口用于定义自然顺序 包装类和基本数据的转换 jdk5之前手动装箱拆箱 jdk5之后自动装箱拆箱 自动装箱底层调用的是valueof方法 拆箱仍然是intvalue方法 public class Inte…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制&#xff1a;256MB 时间限制&#xff1a;1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟&#xff0c;没有吃上早饭。于是你骑着自行车去超市&#xff0c;但是你又发现商店的工作人员已经重新贴上了价格标签&#xff0c;零食价格都涨了50%。你…

Selenium的八种定位方式

1. 通过 ID 定位 ID 是最直接和高效的方式来定位元素&#xff0c;因为每个页面中的 ID 应该是唯一的。 from selenium import webdriverdriver webdriver.Chrome(executable_pathpath/to/chromedriver) driver.get(https://example.com)# 通过 ID 定位 element driver.find…

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog&#xff0c;使用的时候、特别是部署的时候&#xff0c;需要改环境&#…

OpenMM的安装与使用

技术背景 OpenMM是一款基于Python开发的开源分子动力学模拟软件&#xff0c;这几年因为AlphaFold的缘故&#xff0c;使得这个软件的热度有了不少提升。并且可以使用GPU硬件加速&#xff0c;所以性能上也不赖。这里介绍一下该软件的基本安装和使用方法&#xff0c;并附带一个真空…

Linux各种并发服务器优缺点

本文旨在介绍针对“无并发C/S模型”改进的方法总结以及各种改进方法的优缺点&#xff0c;具体函数的实现并不介绍。 1. 无并发C/S模型 创建服务器流程分析&#xff1a; socket()创建服务器的监听套接字bind()将服务器给服务器的监听套接字绑定IP地址和Port端口号listen()设置…

cookie反爬----普通服务器,阿里系

目录 一.常见COOKIE反爬 普通&#xff1a; 1. 简介 2. 加密原理 二.实战案例 1. 服务器响应cookie信息 1. 逆向目标 2. 逆向分析 2. 阿里系cookie逆向 1. 逆向目标 2. 逆向分析 实战&#xff1a; 无限debugger原理 1. Function("debugger").call() 2. …

网络无人值守批量装机-cobbler

网络无人值守批量装机-cobbler 一、cobbler简介 ​ 上一节中的pxe+kickstart已经可以解决网络批量装机的问题了,但是环境配置过于复杂,而且仅针对某一个版本的操作系统进批量安装则无法满足目前复杂环境的部署需求。 ​ 本小节所讲的cobbler则是基于pxe+kickstart技术的二…

推荐一款开源电子书阅读器Koodo Reader

Koodo Reader 是一个开源的电子书阅读器&#xff0c;支持多达15种主流电子书格式&#xff0c; 内置笔记、高亮、翻译功能&#xff0c;助力高效书籍阅读和学习。 官网地址&#xff1a;https://www.koodoreader.com/zh 一、下载软件 下载地址&#xff1a;https://dl.koodoreader.…