利用PrefabEditor监听prefab保存事件
目的
在使用prefab时,可能想要对prefab做一些预处理后再保存,减少运行时的计算量。但美术制作的过程中一般不会有这种考虑。这时就希望有一段程序在prefab保存前做一部分修改,以满足运行时要求。一种解决方案就是利用Unity提供的PrefabStage类。PrefabStage类中提供了prefab打开,关闭,保存时的事件,可注册相应的函数以达到自身的目的。
PrefabStage文档
官方文档地址:https://docs.unity3d.com/ScriptReference/Experimental.SceneManagement.PrefabStage.html
示例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Experimental.SceneManagement;public class Test
{[InitializeOnLoadMethod]static void RegisterPrefabStageEvents(){PrefabEditor t = new PrefabEditor();PrefabStage.prefabSaving += t.OnSaving;PrefabStage.prefabSaved += t.OnSaved;PrefabStage.prefabStageClosing += t.OnClosing;PrefabStage.prefabStageOpened += t.OnOpend;}void OnSaving(GameObject go){Debug.LogFormat("GameObject({0}) is saving.", go.name);}void OnSaved(GameObject go){Debug.LogFormat("GameObject({0}) is saved.", go.name);}void OnOpend(PrefabStage stage){Debug.LogFormat("GameObject({0}) is opend.", stage.assetPath);}void OnClosing(PrefabStage stage){Debug.LogFormat("GameObject({0}) is closing.", stage.assetPath);}
}
当打开prefab场景编辑的时候,Unity编辑器自身会生成PrefabStage实例,该实例中存储有资源名,资源路径等数据,可根据这些内容决定OnSaving和OnSaved中该执行的逻辑。
注意
官方文档显示这个API还处于试验阶段,目前参考的时2020.3版本,其他版本以官方文档或者自身实测结果为准。
参考资料
[1] https://docs.unity3d.com/ScriptReference/Experimental.SceneManagement.PrefabStage.html
[2] https://zhuanlan.zhihu.com/p/148934021
利用PrefabEditor监听prefab保存事件相关推荐
- jquery 监听td点击事件_安卓开发监听点击事件的一种方法
本人是菜鸟一只,学习安卓纯属兴趣.没有真正上过编程课程,所有知识都是在网上获取的.今天分享的是监听点击事件的一个方法,这个方法的好处是代码较简洁. 如图,点击保存时,把上面的数据入库. 实现如下: 在 ...
- Java 创建事件Event、事件监听EventListener、事件发布publishEvent
一.概述 个人认为,事件机制一般可由:事件源source,事件对象Event,事件监听EventListener,事件发布publishEvent组成 事件源:引起事件发生的源: User用户信息, ...
- React Native - Keyboard API使用详解(监听处理键盘事件)
参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...
- Android监听截屏事件
截屏方案对比(截屏事件没有同一的api) 方案一:利用FileObserver监听某个目录中资源变化情况 优点:操作简单 缺点: 不同的手机,默认截屏图片储存的文件夹可能不同 不同的手机,事件回调可能 ...
- html5 浏览器退回事件,html5的pushstate以及监听浏览器返回事件的实现
这篇文章主要介绍了html5的pushstate以及监听浏览器返回事件的实现,主要介绍了pushstate的使用,以及监听浏览器的解决等问题,感兴趣的可以一起来了解一下 pushstate与监听浏览器 ...
- js监听多个事件_JavaScript中的事件与异常捕获解析
这篇文章主要给大家介绍了关于JavaScript中事件与异常捕获的相关资料,文中通过示例代码介绍的非常详细,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批 ...
- vue 监听页面滚动事件:触发animate.min.css动画特效
一.问题答疑: 1. animate.css 如何在vue项目中引入?或引用? 2. 如何监听滚动事件,触发animate.class动画播放? vue 监听滚轮滚动事件,for循环 ,动态id,代码 ...
- element-ui 搜索框组件:监听input键盘事件 - 代码篇
踩坑:vue + element-ui 框架监听input键盘事件 - 含demo演示 代码示下: html部分: <el-inputplaceholder="职位 | 地区 | 工作 ...
- jquery监听窗口大小改变事件jquery.resizeend
方法一: $(function(){// Bind the resize event. When any test element's size changes, update its// corre ...
最新文章
- 【MySQL】数据库2- MySQL表的增删改查(基础)
- java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...
- python程序实例源代码-Python 神经网络手写识别实例源码
- java outofmemory 处理_java.lang.OutOfMemoryError处理错误
- mysql增错误_使用MySQL练习增删改查时因为版本问题出现连接错误
- Atitit 纯java项目的提升进度大法---通用json dsl接口
- C# -Asp.Net.SignalR.Core之Hub
- Open3d之裁剪点云
- mysql 处理一条语句卡死_一条MySQL查询语句,卡死机器,不知道为什么,求高手指点!...
- python可以用vs编辑吗_在VS2017中编写Python程序
- 对外暴露Id异或加密解密
- 过拟合的含义、出现原因及解决方案
- SVM(三),支持向量机,线性不可分和核函数
- PetaLinux学习笔记 1
- 派森诺细菌完成图+转录组+蛋白组+实验端验证高分文章
- Android studio 实现app登录注册页面
- 爬虫学习笔记1:爬虫基本概念
- 银行业智能运维的探索与实践
- Win10微软输入法取消繁体简体切换快捷键的方法
- iOS开发-进阶:被误解的MVC和被神化的MVVM(作者:唐巧)