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();}}}}
}

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

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

相关文章

安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用. 工具步骤演示 今天给友友介绍一款工具&#xff0c;可以用来翻译手机rom语言…

手摸手图解 CodeWhisperer 的安装使用

CodeWhisperer 是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点…

20230919后台面经整理

1.你认为什么是操作系统&#xff0c;操作系统有哪些功能 os是&#xff1a;管理资源、向用户提供服务、硬件机器的扩展 1.进程线程管理&#xff1a;状态、控制、通信等 2.存储管理&#xff1a;分配回收、地址转换 3.文件管理&#xff1a;目录、操作、磁盘、存取 4.设备管理&…

利用 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…

Mybatis面试题(三)

文章目录 前言一、Xml 映射文件中&#xff0c;除了常见的 select|insert|updae|delete 标签之外&#xff0c;还有哪些标签&#xff1f;二、当实体类中的属性名和表中的字段名不一样&#xff0c;如果将查询的结果封装到指定 pojo&#xff1f;三、模糊查询 like 语句该怎么写四、…

24. 图论 - 图的表示种类

Hi&#xff0c;你好。我是茶桁。 之前的一节课中&#xff0c;我们了解了图的来由和构成&#xff0c;简单的理解了一下图的一些相关概念。那么这节课&#xff0c;我们要了解一下图的表示&#xff0c;种类。相应的&#xff0c;我们中间需要穿插一些新的知识点用于更好的去理解图…

C#,数值计算——Multinormaldev的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Multinormaldev : Ran { public Cholesky chol { get; set; } null; private int mm { get; set; } private double[] mean { get; set; } private double[,] xvar {…

shardingjdbc分库分表数据均衡性讨论

问题引入 最近一个业务系统中&#xff0c;因为数据量很大&#xff0c;经过技术选型&#xff0c;综合权衡选择了sharding-Jdbc&#xff0c;本文主要讨论的是分库分表的表达式 我们有一个批次总表A&#xff0c;还有一个明细表B&#xff0c;我们需要对明细表B进行水平拆分&#…

InputAction的使用

感觉Unity中InputAction的使用&#xff0c;步步都是坑。 需求点介绍 当用户长按0.5s 键盘X或者VR left controller primaryButton (即X键)时&#xff0c;显示下一个图片。 步骤总览 创建InputAction资产将该InputAction资产绑定到某个GameObject上在对应的script中&#xf…

计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]

目录标题 VGG参考VGG网络贡献使用尺寸更小的$3 \times 3$卷积串联来获得更大的感受野放弃使用$11 \times 11$和$5 \times 5$这样的大尺寸卷积核深度更深、非线性更强&#xff0c;网络的参数也更少&#xff1b;去掉了AlexNet中的局部响应归一化层(LRN)层。 网络结构主要改进输入…

UE5蓝图一些有用的节点(最近接触的)

1、Get Actor Forward Vector 获取演员向前的矢量&#xff0c;这得到的是一个基于世界坐标的矢量&#xff0c;应该类似于Unity3D中的Transform.forward。 2、SpawnActor From Class 通过类生成演员对象&#xff0c;这不就是new了一个对象吗&#xff0c;呵呵。 3、Get Control…

21 mysql ref 查询

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

基于abaqus的非等速生长Voronoi晶体模型生成插件

1. 非等速生长晶体模型简介 对于标准Voronoi而言&#xff0c;每个晶粒的生长速率是相同的&#xff0c;任意两个晶粒的交界线为其形核点连线的垂直平分线&#xff0c;交界线为一条直线&#xff0c;如图1.1所示。 图1.1 标准Voronoi晶粒交界线 而对于非等速生长Voronoi晶体而言…

肖sir__项目环境之全流程__005

一、测试流程&#xff08;h模型&#xff09; 1、需求文档&#xff08;产品&#xff09; 需求文档&#xff08;软件需求规格说明书srs&#xff09; &#xff08;1&#xff09;如何分析需求 a、显示需求&#xff08;主流程、功能&#xff0c;业务&#xff09; b、隐性需求&#x…

js惰性函数

看下面这份ts代码 实现的效果也很简单,就是将一份文本,复制到剪切板上,未了兼容更多的浏览器(没错说的就是你>ie !),做了一个兼容性判断, 当浏览器支持navigator.clipboard这个api时,就直接调用这个api将文本复制到剪切板中, 如果不支持这个api的话,就执行else里面的代码,这…

解决qml编译时出现错误ninja: build stopped: subcommand failed.

qml编译时出现错误ninja: build stopped: subcommand failed. 如下图&#xff1a; 解决这个编译错误其实很简单&#xff0c;我把Window写错了&#xff0c;写成了window, 如果有类似的报错&#xff0c;可以检查一下qml代码是否有问题。当然在Qt Creator里也没有错误提示&#x…

仿写Timi记账

项目仿照Timi记账&#xff0c;本 APP 仅用作学习&#xff0c;如有侵权联系删除&#xff0c;项目地址&#xff1a;Timi记账 TIMI记账项目 简单功能对于tableview向上延伸部分采用了insertSubview形式&#xff1a;添加特殊字体添加.ttf文件获取plist文件数据 计算器功能说明简单逻…

MySQL 远程连接1130问题

通过后台进入mysql 1,切换到mysql库 2.查询user表信息 3.更新你想远程登录的用户的host信息,我这里想用root进行远程登录,所以修改如下 4.刷新权限 5.大功告成 快来和博主打成一片吧^_^

dll文件找不到,微软官方地址

dll文件找不到&#xff0c;微软官方地址 文件地址dllMicrosoft Visual C 2008 Redistributable Package ATL 安全更新https://www.microsoft.com/zh-cn/download/details.aspx?id10430Visual C Redistributable for Visual Studio 2012 Update 4https://www.microsoft.com/zh…

【Vue】修饰符、表单提交方式、自定义组件的关键步骤

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Vue快速入门》。&#x1f3af;&#x1f3af; &…