unity缩小包体
·
unity缩小包体
去除不需要的aar和so和dll
-
限制aar和so生效的平台,比如有些只需要在 Editor 平台下生效
直接在文件属性中设置 -
导出时根据条件设置是否需要
public class ARCorePreprocessBuild : IPreprocessBuildWithReport { // 要过滤的插件 static readonly string[] k_RuntimePluginNames = { "UnityARCore.aar", "ARPresto.aar", "arcore_client.aar" }; public void OnPreprocessBuild(BuildReport report) { foreach (var plugin in PluginImporter.GetAllImporters()) { if (plugin.isNativePlugin && k_RuntimePluginNames.Any(pluginName => plugin.assetPath.Contains(pluginName))) { plugin.SetIncludeInBuildDelegate(path => isARCoreLoaderEnabled); } } } internal static bool isARCoreLoaderEnabled { get { // 你的条件判断 return true; } } } -
根据需要设置gradle依赖库
比如在 mainTemplate.gradle 中dependencies { if ( project.file('libs/glasslocalizer-release.aar').exists() ){ implementation 'com.rokid.uxrplugin:rkuxrplugin:1.0.4M' } }
去除不需要的程序集
-
用宏定义限制程序集生效的条件
在程序集属性的Define Constraints 中填入依赖的宏定义 -
实现IFilterBuildAssemblies来根据条件过滤掉不需要的程序集
public class RokidBuildProcessor : IFilterBuildAssemblies { readonly string[] runtimeAssemblyNames = new string[] { "RKAREngineAdapter.dll", "RKAREngine.dll", "RKSDK.dll", "EZXRGlassSDK.dll" }; public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies) { // 从 assemblies 中过滤掉你不需要的程序集 return assemblies.Where(assembly => { foreach (var assemblyName in runtimeAssemblyNames) { if (assembly.Contains(assemblyName)) return false; } return true; }).ToArray(); } }
裁剪代码
参考 代码裁剪
- PlayerSettings->Managed Stripping Level 设置为 Medium
设为Low裁剪得很少,程序集中只要有 MonoBehaviour 或 ScriptableObject 派生类,则整个程序集都不会被裁剪 - 示例中的代码如何裁剪呢??
因为示例中的代码包含有 MonoBehaviour 派生类,因此不管裁剪级别设为多高,这些类和用到的类都不会被裁剪
去除静态链接的资源
-
移除不需要的场景
-
如果某些资源只是在Editor模式下用到,那就不要用 Inspector 直接去关联
可以通过建立一个 Editor 类,在运行时通过 AssetDatabase 查找资源并关联,这样这些资源就不会打包public class GameEditorSettingsLoader { [RuntimeInitializeOnLoadMethod] public static void LoadGameEditorSettings() { string searchText = "t:GameEditorSettings"; string[] assets = AssetDatabase.FindAssets(searchText); if (assets.Length > 0) { string path = AssetDatabase.GUIDToAssetPath(assets[0]); GameEditorSettings settings = AssetDatabase.LoadAssetAtPath(path, typeof(GameEditorSettings)) as GameEditorSettings; GameEditorSettings.Instance = settings; } } }
去除Resources文件夹下的资源
Sprite合图
参考 合图
更多推荐



所有评论(0)