当前位置: 首页 > 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();}}}}
}
http://www.lryc.cn/news/173310.html

相关文章:

  • 21 mysql ref 查询
  • 启山智软/一款包含主流商城类型的一款电商中台系统100%开源
  • 【C语言】指针的进阶(四)—— 企业笔试题解析
  • 博弈论——连续产量古诺模型
  • ROS2 驱动思岚G4雷达(ydlidar)- Rviz显示
  • Spring Cloud Alibaba Sentinel流量防卫兵
  • 1.简单工厂模式
  • GitHub Copilot Chat
  • 利用 QT 完成一个人脸识别系统,完成登录操作
  • MATLAB APP纯小白入门 两数相加
  • ubuntu右上角的网络连接图标消失解决办法
  • conda创建虚拟环境安装aix360
  • CentOS安装mariadb
  • FPGA——基础知识合集
  • 【pytest】 标记冒烟用例 @pytest.mark.smoke
  • 数据结构入门-14-排序
  • Gin学习记录4——Controller和中间件
  • FL Studio21.2中文版数字音乐制作软件
  • ELK 企业级日志分析系统 ELFK
  • IDEA中创建Java Web项目方法1
  • 源码:TMS FlexCel Studio for .NET 7.19
  • 多输入多输出 | MATLAB实现PSO-BP粒子群优化BP神经网络多输入多输出
  • 操作系统:系统引导以及虚拟机
  • AIGC绘本——海马搬家来喽
  • strtok()函数的使用方法
  • Matlab中的handle 类
  • C#,数值计算——Multinormaldev的计算方法与源程序
  • 软件项目测试用例评审
  • 图像处理与计算机视觉--第二章-成像与图像表示-8问
  • python中使用多线程批量导入包