目的

在使用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保存事件相关推荐

  1. jquery 监听td点击事件_安卓开发监听点击事件的一种方法

    本人是菜鸟一只,学习安卓纯属兴趣.没有真正上过编程课程,所有知识都是在网上获取的.今天分享的是监听点击事件的一个方法,这个方法的好处是代码较简洁. 如图,点击保存时,把上面的数据入库. 实现如下: 在 ...

  2. Java 创建事件Event、事件监听EventListener、事件发布publishEvent

    一.概述 个人认为,事件机制一般可由:事件源source,事件对象Event,事件监听EventListener,事件发布publishEvent组成 事件源:引起事件发生的源: User用户信息, ...

  3. React Native - Keyboard API使用详解(监听处理键盘事件)

    参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...

  4. Android监听截屏事件

    截屏方案对比(截屏事件没有同一的api) 方案一:利用FileObserver监听某个目录中资源变化情况 优点:操作简单 缺点: 不同的手机,默认截屏图片储存的文件夹可能不同 不同的手机,事件回调可能 ...

  5. html5 浏览器退回事件,html5的pushstate以及监听浏览器返回事件的实现

    这篇文章主要介绍了html5的pushstate以及监听浏览器返回事件的实现,主要介绍了pushstate的使用,以及监听浏览器的解决等问题,感兴趣的可以一起来了解一下 pushstate与监听浏览器 ...

  6. js监听多个事件_JavaScript中的事件与异常捕获解析

    这篇文章主要给大家介绍了关于JavaScript中事件与异常捕获的相关资料,文中通过示例代码介绍的非常详细,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批 ...

  7. vue 监听页面滚动事件:触发animate.min.css动画特效

    一.问题答疑: 1. animate.css 如何在vue项目中引入?或引用? 2. 如何监听滚动事件,触发animate.class动画播放? vue 监听滚轮滚动事件,for循环 ,动态id,代码 ...

  8. element-ui 搜索框组件:监听input键盘事件 - 代码篇

    踩坑:vue + element-ui 框架监听input键盘事件 - 含demo演示 代码示下: html部分: <el-inputplaceholder="职位 | 地区 | 工作 ...

  9. jquery监听窗口大小改变事件jquery.resizeend

    方法一: $(function(){// Bind the resize event. When any test element's size changes, update its// corre ...

最新文章

  1. 【MySQL】数据库2- MySQL表的增删改查(基础)
  2. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...
  3. python程序实例源代码-Python 神经网络手写识别实例源码
  4. java outofmemory 处理_java.lang.OutOfMemoryError处理错误
  5. mysql增错误_使用MySQL练习增删改查时因为版本问题出现连接错误
  6. Atitit 纯java项目的提升进度大法---通用json dsl接口
  7. C# -Asp.Net.SignalR.Core之Hub
  8. Open3d之裁剪点云
  9. mysql 处理一条语句卡死_一条MySQL查询语句,卡死机器,不知道为什么,求高手指点!...
  10. python可以用vs编辑吗_在VS2017中编写Python程序
  11. 对外暴露Id异或加密解密
  12. 过拟合的含义、出现原因及解决方案
  13. SVM(三),支持向量机,线性不可分和核函数
  14. PetaLinux学习笔记 1
  15. 派森诺细菌完成图+转录组+蛋白组+实验端验证高分文章
  16. Android studio 实现app登录注册页面
  17. 爬虫学习笔记1:爬虫基本概念
  18. 银行业智能运维的探索与实践
  19. Win10微软输入法取消繁体简体切换快捷键的方法
  20. iOS开发-进阶:被误解的MVC和被神化的MVVM(作者:唐巧)

热门文章

  1. Asp.net视频点播系统
  2. 报表开发的三个重要思路(指标篇)
  3. java数组设计的原理_动态图-Java常用数据结构及其设计原理
  4. k8s中创建pv和pvc
  5. OA系统,让高效成为企业办公管理标配
  6. 基于SSM的兼职论坛系统的设计与实现
  7. java书籍推荐知乎_java学习书籍推荐
  8. SoundPool类播放音频、案例弹钢琴
  9. 新编计算机专业英语unit2,计算机专业英语Unit_2.ppt
  10. 【云栖大会】不谈电商但无所不在,云栖小镇上另一张面孔的阿里巴巴