Unity 编辑器常用方法
unity编辑器开发
- 脚本注解
- 1. RuntimeInitializeOnLoadMethod
- 2. ColorUsage
- 3. Header
- 4. SerializeField
- 5. HideInInspector
- 6. Space
- 7. Range
- 8. Multiline
- 9.[RequireComponent(typeof())]
- 10.HelpURL
- 右键菜单注解
- 菜单栏注解
- 1. MenuItem
- 2.AddComponentMenu
- 脚本右键注解
- 1. ContextMenu
- PrefabUtility 预制体工具
- 1.常用方法:
- 1. InstantiatePrefab(PrefabAssetPath):
- 2. InstantiatePrefabAsGameObject(PrefabAsset):
- 3. ReplacePrefab(GameObject, PrefabAsset, ReplacePrefabOptions):
- 4. ConnectGameObjectToPrefab(GameObject, PrefabAsset):
- 2.常用事件:
- 1. prefabInstanceUpdated:
- EditorApplication 编辑器
- 1.常用方法:
- 1. Play: 启动游戏模式,将编辑器切换到播放模式。
- 3. Pause: 将游戏暂停,如果游戏正在播放中。
- 4. IsPlaying: 返回一个布尔值,指示当前是否处于播放模式。
- 5. IsPaused: 返回一个布尔值,指示当前是否处于暂停状态(播放模式下)。
- 6. IsPlayingOrWillChangePlaymode: 返回一个布尔值指示当前是否处于播放模式或正在切换到播放模式。
- 7. ExitPlaymode: 退出播放模式。
- 8. OpenScene(string scenePath): 打开指定路径的场景。
- 9. SaveScene: 保存当前场景。
- 10. ReloadLevel: 重新加载当前场景。
- 2.常用事件:
- 1.delayCall: 在指定的延迟时间后触发的事件。
- 2. playModeStateChanged: 当播放模式的状态发生变化时触发的事件。
- 3. playModeStateChanged (delegate):
- 4. sceneOpened: 当场景被打开时触发的事件。
- 5. sceneClosing: 当场景即将关闭时触发的事件。
- 6. hierarchyChanged:当hierarchy中的结构发生改变时触发
脚本注解
1. RuntimeInitializeOnLoadMethod
自动根据RuntimeInitializeLoadType选择一个时机执行。静态方法
- AfterSceneLoad
在场景加载之后初始化子系统。这意味着子系统将在场景加载完成后进行初始化,并在场景加载后的脚本执行时可用。- BeforeSceneLoad
在场景加载之前初始化子系统。这意味着子系统将在场景加载之前进行初始化,并在加载场景时可用。- AfterAssembliesLoaded
在程序集加载完成后初始化子系统。这意味着子系统将在 Unity 引擎加载所有程序集后进行初始化,并在加载完所有程序集后的脚本执行时可用。- BeforeSplashScreen
在显示启动画面(Splash Screen)之前初始化子系统。这意味着子系统将在显示启动画面之前进行初始化,并在启动画面显示前的脚本执行时可用。- SubsystemRegistration
以便在子系统注册时触发相应的初始化方法。
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]public static void Init(){Debug.Log("先把权限添加进列表,然后申请");//AndroidPermissionMgr.permissionList.Add("android.permission.WRITE_SETTINGS"); 红米10X不能获取到此权限}void Start(){AndroidPermissionMgr.StartCheckPermission(0.02f); //开始申请}
2. ColorUsage
- 高级版拾色器,[ColorUsage(showAlpha: true, hdr: true)]
3. Header
- 给这个变量加上一个加粗的标题显示在编辑器中的属性蓝中
4. SerializeField
- 该变量显示到 Inspector 面板中
5. HideInInspector
- 在 Inspector 面板中,隐藏任何类型的变量
6. Space
- 在Inspector 中与上一个变量分割一段距离,网上推荐取值 10
7. Range
- 限制数值型变量的范围
8. Multiline
- 单行string变为多行文本输入
9.[RequireComponent(typeof())]
- 在inspector中添加此脚本时必须要有要求的脚本
10.HelpURL
- 脚本右上角的疑问Url地址
右键菜单注解
1. CreateAssetMenu - 针对ScriptableObject
[CreateAssetMenu(menuName = "ScriptObject/RoadsSetting")]
public class Test{}
菜单栏注解
1. MenuItem
[MenuItem("Tools/做一件事",priority = 0)]void Todo(){Debug.Log("做一件事");}
其中priority为排序优先级
2.AddComponentMenu
将脚本注册到Compoment菜单里面
脚本右键注解
1. ContextMenu
[ContextMenu("自动补空",false,0)]void AutoAddNull(){Debug.Log("做一件事");}
第一个是显示的名称
第二个是“是否为验证函数”,即在为true同名方法执行前会先执行这个函数
第三个是排序优先级
PrefabUtility 预制体工具
1.常用方法:
1. InstantiatePrefab(PrefabAssetPath):
该方法用于在场景中实例化指定路径的预制体,并返回实例化后的游戏对象。
GameObject go = PrefabUtility.InstantiatePrefab((Object)nullPrefabs, transform) as GameObject;
2. InstantiatePrefabAsGameObject(PrefabAsset):
该方法用于在场景中实例化指定的预制体,并返回实例化后的游戏对象。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{public GameObject prefab;[MenuItem("Example/Instantiate Prefab")]private static void InstantiatePrefab(){GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/MyPrefab.prefab");if (prefab != null){GameObject instance = PrefabUtility.InstantiatePrefab(prefab) as GameObject;if (instance != null){// 在场景中实例化预制体后的处理逻辑}}}
}
3. ReplacePrefab(GameObject, PrefabAsset, ReplacePrefabOptions):
该方法用于将游戏对象替换为指定的预制体,并返回替换后的预制体。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{public GameObject prefab;[ContextMenu("Replace With Prefab")]private void ReplaceWithPrefab(){GameObject prefabInstance = PrefabUtility.ReplacePrefab(gameObject, prefab, ReplacePrefabOptions.Default);if (prefabInstance != null){// 替换为预制体后的处理逻辑}}
}
4. ConnectGameObjectToPrefab(GameObject, PrefabAsset):
该方法用于将游戏对象连接到指定的预制体,并将其标记为预制体的实例。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{public GameObject prefab;[ContextMenu("Connect to Prefab")]private void ConnectToPrefab(){PrefabUtility.ConnectGameObjectToPrefab(gameObject, prefab);// 将游戏对象连接到预制体后的处理逻辑}
}
- DisconnectPrefabInstance(GameObject):
该方法用于将游戏对象从预制体实例断开连接,并将其转换为普通的游戏对象。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{[ContextMenu("Disconnect Prefab Instance")]private void DisconnectPrefabInstance(){PrefabUtility.DisconnectPrefabInstance(gameObject);// 断开游戏对象与预制体实例关联后的处理逻辑}
}
2.常用事件:
1. prefabInstanceUpdated:
当预制体实例更新时触发的事件。可以通过订阅此事件,以在预制体实例发生更改时执行自定义逻辑。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{private void OnEnable(){PrefabUtility.prefabInstanceUpdated += PrefabInstanceUpdatedHandler;}private void OnDisable(){PrefabUtility.prefabInstanceUpdated -= PrefabInstanceUpdatedHandler;}private void PrefabInstanceUpdatedHandler(GameObject instance){// 预制体实例更新事件处理逻辑Debug.Log("Prefab instance updated: " + instance.name);}
}
EditorApplication 编辑器
1.常用方法:
1. Play: 启动游戏模式,将编辑器切换到播放模式。
3. Pause: 将游戏暂停,如果游戏正在播放中。
4. IsPlaying: 返回一个布尔值,指示当前是否处于播放模式。
5. IsPaused: 返回一个布尔值,指示当前是否处于暂停状态(播放模式下)。
6. IsPlayingOrWillChangePlaymode: 返回一个布尔值指示当前是否处于播放模式或正在切换到播放模式。
7. ExitPlaymode: 退出播放模式。
8. OpenScene(string scenePath): 打开指定路径的场景。
9. SaveScene: 保存当前场景。
10. ReloadLevel: 重新加载当前场景。
2.常用事件:
1.delayCall: 在指定的延迟时间后触发的事件。
可以使用此事件来执行延迟调用的逻辑。
using UnityEditor;
using UnityEngine;public class MyScript : MonoBehaviour
{[MenuItem("MyMenu/Delayed Method")]private static void DelayedMethod(){EditorApplication.delayCall += DelayedCallback;}private static void DelayedCallback(){Debug.Log("Delayed Method called.");}
}
在上述示例中,我们使用 [MenuItem] 特性为自定义菜单项添加了一个 “Delayed Method” 选项。当点击该菜单项时,DelayedMethod 方法会被调用。
在 DelayedMethod 方法中,我们订阅了 EditorApplication.delayCall 事件,并将其回调方法设置为 DelayedCallback。这意味着 DelayedCallback 方法将在下一帧或稍后时间被调用。
在 DelayedCallback 方法中,我们简单地输出一条日志来表示延迟调用的方法已被执行。
2. playModeStateChanged: 当播放模式的状态发生变化时触发的事件。
可以通过订阅此事件,在播放模式开始、结束或暂停时执行自定义逻辑。
3. playModeStateChanged (delegate):
与上述事件相同,但使用委托(delegate)订阅。
4. sceneOpened: 当场景被打开时触发的事件。
可以通过订阅此事件,在场景被打开后执行自定义逻辑。
5. sceneClosing: 当场景即将关闭时触发的事件。
可以通过订阅此事件,在场景关闭前执行自定义逻辑。
6. hierarchyChanged:当hierarchy中的结构发生改变时触发
using UnityEditor;
using UnityEngine;public class MyCustomEditor : EditorWindow
{[InitializeOnLoadMethod]private static void Initialize(){EditorApplication.hierarchyChanged += OnHierarchyChanged;}private static void OnHierarchyChanged(){// 预制体更新事件发生时执行的逻辑//Debug.Log(Selection.activeGameObject.name);if (Selection.activeGameObject){if (Selection.activeGameObject.transform.parent){var obj = Selection.activeGameObject.transform.parent.GetComponent<AutoLayout>();if (obj != null){obj.OnTransformChildrenChanged();}}}}
}
相关文章:
Unity 编辑器常用方法
unity编辑器开发 脚本注解1. RuntimeInitializeOnLoadMethod2. ColorUsage3. Header4. SerializeField5. HideInInspector6. Space7. Range8. Multiline9.[RequireComponent(typeof())]10.HelpURL 右键菜单注解1. CreateAssetMenu - 针对ScriptableObject 菜单栏注解1. MenuIt…...

21 mysql ref 查询
前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 此系列文章建议从 mysql const 查询 开始看 测试表结构…...

启山智软/一款包含主流商城类型的一款电商中台系统100%开源
文章目录 介绍一、Smart Shop JAVA 微服务电商中台优势二、电商中台包含那些主流商城模式1.S2B2C供应链商城2.B2B2C多商户商城3.B2C单商户商城4.O2O外卖配送商城5.社区团购商城 6.演示地址总结 介绍 想要了解代码规范,学习商城解决方案,点击下方官网链接…...

【C语言】指针的进阶(四)—— 企业笔试题解析
笔试题1: int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址,&a就表示整个数组,因此…...

博弈论——连续产量古诺模型
连续产量古诺模型 连续产量古诺模型是博弈论中非常经典的模型,以两厂商连续产量古诺博弈为例: 1、模型建立 Player:两个供应相同产品的厂商 产量:厂商1的产量为q1,厂商2的产量为q2,市场总供给为Qq1q2。…...

ROS2 驱动思岚G4雷达(ydlidar)- Rviz显示
记录G4雷达的配置 系统环境为:Ubuntu22.04 配置步骤 1、安装雷达SDK 2、构建 G4 雷达 ROS2 项目工程文件 3、使用Rviz可视化界面显示 1、安装雷达SDK 1.1 安装CMake YDLidar SDK需要CMake 2.8.2作为依赖项 Ubuntu 18.04或者Ubuntu 22.04 sudo apt install cmak…...

Spring Cloud Alibaba Sentinel流量防卫兵
文章目录 Spring Cloud Alibaba Sentinel流量防卫兵1. 分布式遇到的问题2.解决的方法 Sentinel: 分布式系统的流量防卫兵1. 简介和特折 Sentinel流量防卫兵的搭建1.引入依赖2.添加配置类3.运行类上添加SentinelResource,并配置blockHandler和fallback4. linux中放入…...

1.简单工厂模式
UML类图 代码 main.cpp #include <iostream> #include "OperationFactory.h" using namespace std;int main(void) {float num1;float num2;char operate;cin >> num1 >> num2 >> operate;Operation* oper OperationFactory::createOpera…...

GitHub Copilot Chat
9月21日,GitHub在官网宣布,所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉,GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成,整体使用方法与ChatGPT类似。例如&…...
利用 QT 完成一个人脸识别系统,完成登录操作
1.配置文件 # Project created by QtCreator 2023-09-22T10:34:23 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET project TEMPLATE appSOURCES main.cpp\widget.cppHEADERS widget.hFOR…...

MATLAB APP纯小白入门 两数相加
万事开头难,最怕第一次。使用matlab APP 实现两数求和,如下图所示,c a b,输入数字后,按 “” 就计算。 步骤 拖拽三个 Edit Field(Numeric) 过来,并且双击名字分别改为 a,b,c。注意修改名字后右边会有点变…...

ubuntu右上角的网络连接图标消失解决办法
ubuntu更新了几个文件后,我的ubuntu系统右上角的网络连接图标就消失了,然后怎么也找不到了,怎么办呢? 1、按快捷键ctrlaltt打开终端 2、按以下顺序输入如下的命令行 sudo service network-manager stop sudo rm /var/lib/Netw…...

conda创建虚拟环境安装aix360
目录 创建虚拟环境查看已有虚拟环境进入所创建的虚拟环境查看已安装的程序查看已安装的python模块配置镜像pipconda 安装aix360将环境添加到jupyter删除虚拟环境 创建虚拟环境 conda create -n aix360 python3.9查看已有虚拟环境 conda env list进入所创建的虚拟环境 activa…...
CentOS安装mariadb
1、 安装 [rootlocalhost ~]# yum install mariadb mariadb-server2、 启动并自启 [rootecs-3f21 ~]# systemctl enable mariadb –now3、 查看启动状态 [rootecs-3f21 ~]# systemctl status mariadb4、 初始化mariadb并设置root密码 [rootecs-3f21 ~]# mysql_secure_inst…...

FPGA——基础知识合集
文章目录 前言1、简述触发器与锁存器的区别2、简述 if-else 语句和 case 语句的区别3、相对 ARM、DSP 等处理器,谈谈 FPGA 具有哪些优势4、简述 Verilog 语句中阻塞赋值与非阻塞赋值的含义与区别,以及各自的适用的场景5、什么是同步电路,什么…...

【pytest】 标记冒烟用例 @pytest.mark.smoke
1. 使用 pytest.mark.smoke 标记用例 import pytest class Test_Smoke:def test_01(self):assert 112pytest.mark.smokedef test_02(self):assert 121pytest.mark.smokedef test_03(self):assert 1 2 3 2.配置文件pytest.ini [pytest] markers smoke 3. 运行指定标签 运…...

数据结构入门-14-排序
一、选择排序 1.1 选择排序思想 先把最小的元素拿出来 剩下的,再把最小的拿出来 剩下的,再把最小的拿出来 但是这样 空间复杂度是O(n) 优化一下,希望原地排序 1.1.2 选择原地排序 索引i指向0的位置 索引j指向i1的元素 j 后面的元素遍历&…...

Gin学习记录4——Controller和中间件
一. Controller 用不同的Controller可以实现业务的分类,不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装,直接将ctrl的代码写入到一个文件里然后调用: package adminimport ("net/http""git…...

FL Studio21.2中文版数字音乐制作软件
现在的FL也可以像splice一样啦,需要什么样的声音只需在fl里搜索,就会自动展示给你! FL Studio 简称FL,全称:Fruity Loops Studio,国人习惯叫它"水果"。软件现有版本是 FL Studio 21,已全面升级支…...

ELK 企业级日志分析系统 ELFK
目录 一、概述 二、组件介绍 2.1、ElasticSearch 2.2、Kiabana 2.3、Logstash 2.4、可以添加的其它组件:Filebeat 2.5、缓存/消息队列(redis、kafka、RabbitMQ等) 2.6、Fluentd 三、ELK工作原理 四、实例演示 1.ELK之 部署"E&q…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...