Unity打包时隐藏/删除场景中部分内容

news/2025/1/17 0:57:01/文章来源:https://www.cnblogs.com/dewxin/p/18240921

背景

使用Unity编辑器时,我们有时候会将服务端的一些信息通过Unity编辑,但由于这部分内容属于服务端,客户端仅限于编辑器中的编辑,我们并不希望将这部分内容打包出去。因此我们需要在打包时将其隐藏或者删除,但是又不影响编辑器的编辑。

打包相关的回调接口 IPreprocessBuildWithReport 和 IPostprocessBuildWithReport

网上搜索Unity打包的回调,首先可以找到的是IPreprocessBuildWithReportIPostprocessBuildWithReport两个接口。

那么首先想到的方法是在打包前通过IPreprocessBuildWithReport.PreprocessBuild回调将需要的GameObject隐藏,然后在打包结束后通过IPostprocessBuildWithReport.PostprocessBuild将隐藏的GameObject恢复。

中间会遇到的问题有重新打开Scene会导致之前保存的GameObject引用失效。

并且最后会遇到一个问题无法解决。。那就是打包前的回调IPreprocessBuildWithReport.PreprocessBuild中的操作会被Unity保留,但是打包后的回调IPostprocessBuildWithReport.PostprocessBuild中的操作会被Unity丢弃。

也就是Unity会将Scene文件返回到打包前的状态。。。

另一个回调接口 IProcessSceneWithReport

那么为什么Unity会将Scene文件返回到打包之前的状态呢。。。是不是Unity自己也会在打包时对scene文件进行修改,所以需要在打包结束将其还原。
如果有一个接口,在里面修改的内容能够影响打包后的结果,也会被还原就好了。
通过反复查看Unity的文档,此时 IProcessSceneWithReport接口进入我们的眼帘,有没有可能,这个接口里面的操作会影响打包的结果,并且期间的操作会在打包结束后还原。

结果真如我们所料。这个回调里面的操作会影响打包结果,并且会在打包结束后还原。

也有一点出乎我们的意料。这个回调会在编辑器进入PlayMode时被调用。

Gif中的Prefab会在打包时被删除。

最终代码

internal class BuildOperationProcessor :  IProcessSceneWithReport
{public int callbackOrder => int.MaxValue;public void OnProcessScene(Scene scene, BuildReport report){foreach (var rootObj in scene.GetRootGameObjects()){var iDeleteOperations = rootObj.GetComponentsInChildren<IBuildOperationDelete>(true);foreach (var iDeleteOperation in iDeleteOperations){var deleteOperation = iDeleteOperation as MonoBehaviour;MonoBehaviour.DestroyImmediate(deleteOperation.gameObject);}}foreach (var rootObj in scene.GetRootGameObjects()){var iHideOperations = rootObj.GetComponentsInChildren<IBuildOperationHide>();foreach (var iHideOperation in iHideOperations){var hideOperation = iHideOperation as MonoBehaviour;//var objName = hideOperation.gameObject.GetFullName();//Debug.Log($" add hide obj {objName}");hideOperation.gameObject.SetActive(false);}}}}

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

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

相关文章

IEEE754浮点数表示形式

IEEE754浮点数表示形式 IEEE754浮点数官方文档:https://ieeexplore.ieee.org/document/8766229浮点数的上述表示形式,既没有规定阶码和尾数的位数,也没有规定阶码和尾数采用的机器码形式(原码、反码、补码和移码)。实际上,直到20世纪80年代初,浮点数表示形式还没有统一标…

NOTION添加提醒用@

以下摘自:https://notionchina.co/guide/editing-pages/reminders-mentions.html@-提及一个日期 # 当你输入@后跟一个日期(或today、tomorrow、或yesterday),你会在你的页面上添加一个内联的时间戳。例如,输入@1/12会自动添加一个时间戳,有助于根据需要为你的工作确定日期。…

ch5 信息不对称与信息经济

ch5 信息不对称与信息经济重点信息不对称的原因和类型 委托代理关系的构成 逆向选择 道德风险课程目标 掌握信息不对称的经典理论与应用; 了解信息不对称的原因、类型和对市场交易的影响,知晓信息不对称的基本解决方案,明确委托代理的基本原理和方法; 知道逆向选择、道德风…

OpenCV RotatedRect类中angle参数解析 C++

0.前言 本文主要探讨RotatedRect类angle的实际含义,为后续学者提供一定的参考。 1.官方手册 RotatedRect其一构造函数如下图(图1-1)所示。在OpenCV图形坐标系中,水平方向向右为x轴正方向,垂直方向向下为y轴正方向,左上角为(0,0)点。 center表示矩形的中心坐标,size中包含了…

字节面试:CPU被打满了/CPU100%,如何处理?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

ResourceManager unable to find resou

哈喽,大家好,我是木头左,AI改变生活!一、问题描述 在使用Mybatis自定义模板引擎时,可能会遇到一些问题。本文将介绍一个常见的报错信息:org.apache.velocity.exception.ResourceManagerException: Unable to find resource。这个错误通常表示Velocity引擎无法找到指定的资…

科技巨头的裁员潮:AI转型的代价是同事?

哈喽,大家好,我是木头左,AI改变生活!随着2024年的到来,硅谷科技大厂裁员的消息如同潮水般涌来。谷歌、亚马逊甚至苹果公司,都传出了人员减员、部门关停的消息。对于硅谷大厂连绵不断的裁员,有分析指出,科技巨头竞争白热化,AI转型是一次成本巨大的押注,而这部分激增的…

免费公益Teamspeak3服务器(附服务器地址,可开私人频道)

服务器地址:ts.melonagua.icu 可开私人频道,q2424149926

Android studio实现图标方式展示信息(折线图等)时com.github.mikephil.charting.charts.LineChart标红

参考连接—— https://blog.csdn.net/m0_37919094/article/details/122416408去 https://gitcode.com/PhilJay/MPAndroidChart/overview?utm_source=csdn_github_accelerator&isLogin=1 下载MPAndroidChart的zip包,解压在Android studio中操作 file——》new——》import…

软件工程课程总结

这学期上的软件工程课程非常充实,学会很多东西,大二下我们主要学习的Android studio(手机端)的开发,手机端对我来说是一个全新的知识,刚开始接触觉得很难,我网上看了很多资料,很抽象,很多很杂,因为安卓的视频都很老,基本上都是2020年以前的,可能在不远的将来安卓也会…

Oracle静默安装

1.安装前准备 1.1.关闭防火墙和SELINUX systemctl stop firewalld systemctl disable firewalld sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config1.2.修改主机名 vi /etc/hostname1.3.添加hosts解析 vi /etc/hosts #-------------------------…

ch4 信息搜寻与最优信息决策

信息搜寻与最优信息决策重点贝叶斯信念 信息搜寻预期收益(大题)课程内容 了解信息决策的基本原理,重点掌握信息搜寻理论的分析框架及其在具体实践中的应用。(1)信息与一般决策过程(2)不确定性与信息离散分布(3)信息搜索模型(4)最优信息决策 信息与决策 noth…