当前位置: 首页 > news >正文

Unity 编辑器常用方法

unity编辑器开发

  • 脚本注解
    • 1. RuntimeInitializeOnLoadMethod
    • 2. ColorUsage
    • 3. Header
    • 4. SerializeField
    • 5. HideInInspector
    • 6. Space
    • 7. Range
    • 8. Multiline
    • 9.[RequireComponent(typeof())]
    • 10.HelpURL
  • 右键菜单注解
    • 1. CreateAssetMenu - 针对ScriptableObject
  • 菜单栏注解
    • 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.演示地址总结 介绍 想要了解代码规范&#xff0c;学习商城解决方案&#xff0c;点击下方官网链接…...

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; 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是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…...

博弈论——连续产量古诺模型

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

ROS2 驱动思岚G4雷达(ydlidar)- Rviz显示

记录G4雷达的配置 系统环境为&#xff1a;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&#xff0c;并配置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日&#xff0c;GitHub在官网宣布&#xff0c;所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉&#xff0c;GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成&#xff0c;整体使用方法与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纯小白入门 两数相加

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

ubuntu右上角的网络连接图标消失解决办法

ubuntu更新了几个文件后&#xff0c;我的ubuntu系统右上角的网络连接图标就消失了&#xff0c;然后怎么也找不到了&#xff0c;怎么办呢&#xff1f; 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 等处理器&#xff0c;谈谈 FPGA 具有哪些优势4、简述 Verilog 语句中阻塞赋值与非阻塞赋值的含义与区别&#xff0c;以及各自的适用的场景5、什么是同步电路&#xff0c;什么…...

【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 选择排序思想 先把最小的元素拿出来 剩下的&#xff0c;再把最小的拿出来 剩下的&#xff0c;再把最小的拿出来 但是这样 空间复杂度是O(n) 优化一下&#xff0c;希望原地排序 1.1.2 选择原地排序 索引i指向0的位置 索引j指向i1的元素 j 后面的元素遍历&…...

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类&#xff0c;不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装&#xff0c;直接将ctrl的代码写入到一个文件里然后调用&#xff1a; package adminimport ("net/http""git…...

FL Studio21.2中文版数字音乐制作软件

现在的FL也可以像splice一样啦&#xff0c;需要什么样的声音只需在fl里搜索&#xff0c;就会自动展示给你! FL Studio 简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;国人习惯叫它"水果"。软件现有版本是 FL Studio 21&#xff0c;已全面升级支…...

ELK 企业级日志分析系统 ELFK

目录 一、概述 二、组件介绍 2.1、ElasticSearch 2.2、Kiabana 2.3、Logstash 2.4、可以添加的其它组件&#xff1a;Filebeat 2.5、缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09; 2.6、Fluentd 三、ELK工作原理 四、实例演示 1.ELK之 部署"E&q…...

【独家拆解】Sora 2正式版底层架构升级:从DiT-XL到时空联合注意力v3.2,性能提升217%的关键证据

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2正式版发布背景与核心定位 OpenAI 于2024年第三季度正式发布 Sora 2&#xff0c;标志着视频生成模型从实验性原型迈入工业级部署新阶段。此次发布并非简单迭代&#xff0c;而是基于对数百万小时真…...

《B4003 [GESP202406 三级] 移位》

题目背景 对应的选择、判断题&#xff1a;https://ti.luogu.com.cn/problemset/1151 题目描述 小杨学习了加密技术移位&#xff0c;所有大写字母都向后按照⼀个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环&#xff0c;例如&#xff0c;当偏移量是 3 的时候&#…...

Claude文本压缩可视化工具:揭秘LLM长文本处理与Prompt优化

1. 项目概述与核心价值最近在折腾大语言模型&#xff08;LLM&#xff09;应用开发&#xff0c;特别是围绕 Anthropic 的 Claude 系列模型时&#xff0c;我发现了一个挺有意思的开源工具——danielsod12/claude-compaction-viewer。简单来说&#xff0c;这是一个专门用来“可视化…...

DMRG-SCF方法:量子化学强关联系统的高效计算方案

1. DMRG-SCF方法概述&#xff1a;量子化学中的强关联系统解决方案密度矩阵重整化群自洽场&#xff08;DMRG-SCF&#xff09;方法是近年来量子化学领域最具突破性的进展之一&#xff0c;它巧妙结合了两种经典理论的优势。作为一位长期从事量子化学计算的科研人员&#xff0c;我见…...

Docker容器化机械臂控制:OpenClaw项目环境部署与实战

1. 项目概述&#xff1a;当机械臂遇上Docker最近在折腾一个挺有意思的项目&#xff0c;叫openclaw-in-docker。光看名字&#xff0c;很多朋友可能就猜到了&#xff0c;这是一个把开源机械臂控制项目OpenClaw给容器化的工程。简单来说&#xff0c;就是把原本可能需要在特定系统、…...

保姆级避坑指南:用GGCNN源码搞定Cornell抓取数据集转换(附.mat/.tiff生成全流程)

保姆级避坑指南&#xff1a;用GGCNN源码搞定Cornell抓取数据集转换全流程 当你第一次尝试复现GGCNN这个经典的机器人抓取项目时&#xff0c;Cornell数据集的预处理往往会成为第一个拦路虎。作为一个曾经在这个环节卡了整整两天的过来人&#xff0c;我深知那些官方文档没写的细节…...

构建本地离线文档库:DevDocs 部署与开发效率提升指南

1. 项目概述&#xff1a;一个为开发者量身定制的本地知识库如果你和我一样&#xff0c;每天都要和大量的技术文档、API参考、编程语言手册打交道&#xff0c;那你一定对在十几个浏览器标签页之间反复横跳、或者依赖不稳定的网络去访问某个官方文档站点的体验深恶痛绝。cyberagi…...

ARMv8/v9架构ID_AA64ISAR3_EL1寄存器详解与应用

1. AArch64指令集属性寄存器ID_AA64ISAR3_EL1概述 在ARMv8/v9架构中&#xff0c;ID_AA64ISAR3_EL1是一个关键的系统寄存器&#xff0c;它属于AArch64指令集属性寄存器家族。这个64位寄存器专门用于描述处理器在AArch64执行状态下实现的各种指令集扩展特性。作为ARM架构的标准实…...

ReMe开源框架:突破AI智能体上下文限制与状态丢失的长期记忆管理方案

1. 项目概述与核心价值 如果你正在构建一个需要长期记忆的AI智能体&#xff0c;比如一个能记住你编程偏好的代码助手&#xff0c;或者一个能追踪用户历史问题的客服机器人&#xff0c;那么你肯定遇到过两个让人头疼的“顽疾”&#xff1a; 上下文窗口限制 和 会话状态丢失 …...

SAP S4后台表PRCD_ELEMENTS增量同步逻辑

PRCD_ELEMENTS本身没有创建或修改的时间戳&#xff0c;可采用下面的方式做增量同步&#xff1a; 1.SD模块有3个点分别增量同步 1&#xff09;销售订单&#xff1a;通过VBAK-KNUMV关联PRCD_ELEMENTS-KNUMV&#xff0c;且PRCD_ELEMENTS-KAPPL V&#xff0c;按VBAK-ERDAT(新增)…...