【厚积薄发】使用SBP打AssetBundle时脚本引用丢失

文摘   2024-09-02 19:14   上海  
这是第401篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com

UWA QQ群:793972859


本期目录:
  • 使用SBP打AssetBundle时脚本引用丢失

  • 在UE 5.3中连接Power节点为何10的3次幂等于1009

  • 如何在Widget中倾斜一张纹理贴图

  • 如何在打开关卡蓝图时更改游戏模式


AssetBundle

Q:最近项目实验升级ScriptableBuildPipeline打包AssetBundle(之前使用的是Built-in构建管线)。使用的Unity为2022.3,SBP版本为2.1.4。

结果发现打出的UI AssetBundle中,部分NGUI的脚本丢失引用了,丢的最多的是UIButton。但也不是所有UI都会丢失,有的就正常,Built-in管线打包也正常。

真机上加载资源的时候会报错:

Error: A scripted object (script unknown or not yet loaded) has a different serialization layout when loading. (Read 32 bytes but expected 8136 bytes)

Did you #ifdef UNITY_EDITOR a section of your serialized properties in any of your scripts?

UnityEngine.AssetBundle:LoadAsset(String)


使用AssetStudio解包AssetBundle发现脚本的m_PathId为0。这可能是哪儿的问题?

A:后续:
针对出问题的文件单独导出独立工程Demo去调试。发现出问题的情况是AssetBundle的引用也包含了相同的脚本且这个引用也是打AssetBundle的,应该是递归引用的时候出问题了。

解决方案:
1. 设置SBP中BuildParameters的NonRecursiveDependencies为false。

修改方法:
a. 将Library\PackageCache夹子下SBP的组件移动到Packages下变为本地组件,即可编辑代码。
b. 使用SBP非兼容模式接口构建,new出BuildParameters,然后可修改此属性。

2. 将脚本信息都写入到一个独立的Bundle中,这样所有Bundle都引用它即可,这种方式需要启用CreateMonoScriptBundle。

修改方法:
SBP组件中的DefaultBuildTasks脚本Create接口内
return AssetBundleCompatible(false, true);

感谢题主mr.Tian@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/66babdd6682c7e5cd61bf8ae
Script

Q:在UE 5.3中,我连接Power节点计算10的3次幂,得到的结果是1009,这是为什么呢?

A:幂函数计算非常慢,因此会使用近似值来加快计算速度,所以可能会出现这种情况。可以改用Multiply多次相乘计算结果,或者用Material Expression Custon输入公式进行计算,手动造一个计算节点。

针对以上问题,有经验的朋友欢迎转至社区交流
https://answer.uwa4d.com/question/66d55d47682c7e5cd61bf8c7
UI

Q:我想在Widget中倾斜一张纹理,就像Photoshop中的效果那样,有什么方法可以做到吗?

A:可以使用材质蓝图实现,基本原理是调整UV来实现倾斜的效果。也可以直接下载UE官方项目UI Material Lab,有一个Skew的倾斜材质,核心的实现方式可以重点参考其中名为MF_UI_Skew的Material Function。

针对以上问题,有经验的朋友欢迎转至社区交流
https://answer.uwa4d.com/question/66d55e593d306f3e9d594d11
Blueprint

Q:当角色触发On Component Begin Overlap(StaticMesh)时我调用Open Level(by Name)来打开新场景,同时我还想改变游戏模式,例如从BP_ThirdPersonGameMode类型的第三人称视角变为BP_FirstPersonGameMode的第一人称射击游戏,请问该怎么做呢?

A:由于每个关卡都可以在World Setting中设置单独的Game Mode,因此只要设置好在切换场景时切换游戏模式也是很自然的事情。另外可以用Trigger Box直接在关卡蓝图获得OnActorBeginOverlap,比Static Mesh使用更方便。

针对以上问题,有经验的朋友欢迎转至社区交流
https://answer.uwa4d.com/question/66d55ef23d306f3e9d594d12

封面图来源于网络


天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。


UWA官网:www.uwa4d.com

UWA社区:community.uwa4d.com

UWA学堂:edu.uwa4d.com

官方技术QQ群:793972859


(长按识别二维码进入UWA问答)


点击下方名片关注我们,将我设为星标,及时接收小编每日推送哦,性能优化不迷路~

 

UWA DAY 2024 游戏开发者大会|全议程公布


近期精彩回顾

【万象更新UWA支持鸿蒙HarmonyOS NEXT

【万象更新】使用 UWA Gears 定位游戏内存问题

【厚积薄发】TA实践分享:材质与渲染——水体(Unity+UE)

【学堂上新】UWA学堂上新|搭建寻路服务器实现服务器刷怪和怪巡逻


侑虎科技
UWA,专业的游戏和VR应用性能优化平台。www.uwa4d.com
 最新文章