Unity将核心脚本打成DLL是否有性能影响

news/2025/2/20 15:47:03

1)Unity将核心脚本打成DLL是否有性能影响
​2)预制物嵌套导致AssetBundleName修改后对母预制物丢失引用
3)真人真机测试报告中AB.LoadFromFile耗时较高
4)如何剔除掉Shader中某一个Pass


这是第287篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Build

Q:Unity将核心脚本打成DLL,比如将某块核心系统打成DLL后,运行时调用DLL是否有性能影响?

A1:没有影响,Unity默认就是会帮你将C#代码给生成DLL。如果打包到Android或者iOS,现在都会再将DLL用IL2CPP转成CPP代码。

感谢liu@UWA问答社区提供了回答

A2:现在Unity各平台基本都是用IL2CPP,使用IL2CPP开始构建时,Unity会自动执行以下步骤:

  1. 将Unity Scripting API代码编译为常规 .NET DLL(托管程序集)。
  2. 应用托管字节码剥离。此步骤可显著减小构建的游戏大小。
  3. 将所有托管程序集转换为标准C++代码。
  4. 使用本机平台编译器编译生成的C++代码和IL2CPP的运行时部分。
  5. 将代码链接到可执行文件或DLL,具体取决于目标平台。

以上摘自Unity官方文档,以便题主理解。

IL2CPP官方文档:IL2CPP - Unity 手册

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流:
unity 讲核心脚本打成dll 是否有性能影响 -- UWA问答:帮助开发者找到更好的答案


AssetBundle

Q:Unity 2020.3.16预制物嵌套时,子预制物引用的图片AssetBundleName修改后,母预制物会丢失引用。

举例来说,预制物A中有个预制物B,然后预制物B上的RawImage引用图片C。ABC三个打到不同AssetBundle中。

首次打包,加载全部AssetBundle,实例化A,A显示正常。

修改图片C包名,再次打包,A所在包不会有变动。但是加载全部AssetBundle,实例化A,A会丢失C的引用。

反编译AssetBundle会发现,实际预制物A所在资源包数据中有图片C的引用数据,但是因为二次打包A包无变化,就没有更新C所在包的数据。

这个问题升级Unity是否可以解决?或者在当前版本是否可以避开?

反编译AssetBundle会发现A所在Bundle会直接以External References形式关联到图片C的地址,并且AssetBundle也会依赖到图片C所在Bundle(但是不依赖到嵌套Prefab B所在Bundle)。

Prefab B重新关联图片D再打包,A引用会正常刷新。但是仅仅修改图片C的BundleName再打包,不会触发A重新打包。

AssetBundle的Manifest显示的A和B依赖关系是不正确的,显示还是A依赖B,B依赖C,和实际解包出来的不一样。

现在已经用追踪Prefab嵌套树,外加资源BundleName监视的流程暂时解决了打包问题。但是还是希望能获得更规范的解决方案。

A:Unity Prefab嵌套目前只处理了Editor部分,打包AssetBundle时,会将Subprefab的序列化文件部分copy一份到Rootprefab,其实就等于AssetBundle环境下,嵌套Prefab不生效。

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流:
unity 讲核心脚本打成dll 是否有性能影响 -- UWA问答:帮助开发者找到更好的答案


AssetBundle

Q:如下图所示,在报告中常注意到资源管理模块中AB.LoadFromFile单次调用耗时较高(几十甚至几百毫秒),且不同AssetBundle包加载耗时差距较大,请问是什么原因导致的?

A:理论上,当使用LZ4压缩的AssetBundle包加载时只需要加载头文件,不应该需要如此大量的耗时。猜测是使用了LZMA的打包方式导致的。

实验将10张、50张纹理分别用LZMA、LZ4打包,多次测试取中位数,得到AssetBundle加载耗时如下图,基本符合预测。

其中,LZMA加载AssetBundle需要同时进行解压,耗时与AssetBundle中资源大小相关(如图1,正好成5倍关系);所以会产生报告中不同AssetBundle包加载耗时差距较大的现象。

而LZ4加载仅需加载头文件,耗时极低。

LZMA打包方式
LZ4打包方式

感谢Faust@UWA问答社区提供了回答,欢迎大家转至社区交流:
unity 讲核心脚本打成dll 是否有性能影响 -- UWA问答:帮助开发者找到更好的答案


Shader

Q:如何在发布APK的时候,利用代码自动剔除掉Shader中某一些Pass?希望这些Pass在Editor环境下可以使用,而在APK包中关闭,这样可以减少变体构建时间。

A:通过ShaderSnippetData提供的PassName匹配想要剔除的PassName就可以了。

感谢题主墙外行人@UWA问答社区提供了回答,欢迎大家转至社区交流:
unity 讲核心脚本打成dll 是否有性能影响 -- UWA问答:帮助开发者找到更好的答案

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)


http://www.niftyadmin.cn/n/1030594.html

相关文章

UIToolkit下一代UI系统

1. UIToolkit运行时――下一代UI系统 UIToolkit的前身是UIElement,发布于Unity 2018。起初它用于开发Editor编辑面板中的UI,自Unity 2019、Unity 2020起正式支持运行时UI并且更名为UIToolkit,它以Package包的形式存在。自Unity 2021.2起&…

2D项目大量物品图标Draw Call优化方案

1)2D项目大量物品图标Draw Call优化方案 ​2)UGUI SpriteAtlas的热更新问题 3)iOS平台突然有一帧UI渲染开销很高 4)iOS上频繁Crash,堆栈很奇怪 这是第288篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发…

基于PaddleOCR训练模型识别数字验证码

基于PaddleOCR训练模型识别数字验证码序言步骤1. 下载PaddleOCR源码2. 下载本项目实战代码3. 下载预训练模型4. 安装PaddlePaddle深度学习框架5. 下载数字图形验证码6. 标注数字图形验证码7. 准备数据字典8. 配置模型训练参数9. 训练模型10. 测试模型11. 导出模型12. 应用模型序…

Unity资产管理与更新系统的一种实现方式

一、概况 这个实现来自于我的个人开源项目 UnityGameWheels(以下简称 UGW),并已在实际生产中有一定的应用。UGW 的代码地址: Core:纯C#部分。其中资产管理和更新相关内容位于Asset。 Unity:和Unity结合的…

基于anaconda管理python包版本

python包版本管理前言一、安装二、常用命令三、建议前言 依赖包版本管理,是任何一门编程语言都不容忽视的问题。 解决python包依赖问题的最佳实践是使用anaconda。 一、安装 官网下载对应操作系统anaconda个人版本安装包,网址: https://www…

UWA Pipeline 2.0 功能详解|私有云真机远程调试

UWA Pipeline 是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线。 为帮助大家更好了解最新2.0版本中的各项新功能,我们将陆续为大家进行详解。 今天先为大家介绍:私有云真机远程调试,我…

注解(Annotation)+ 切面(Aspect)方式打印/输出方法/函数运行时间

文章目录一、定义注解二、定义切面三、使用注解打印运行时长一、定义注解 package demo.config;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target…

ProtoBuf-net Serializer.Serialize产生大量的GC

1)ProtoBuf-net Serializer.Serialize产生大量的GC ​2)如何快速在工程代码中每个函数注入自己想要插入的代码 3)Unity设置IL2CPP导出的Mac平台的Xcode工程中,如何通过Object-C代码反调Unity侧的C#代码 4)ShaderGraph生…