第一范文网 - 专业文章范例文档资料分享平台

Unity3D之脚本批量打包渠道包研究

来源:用户分享 时间:2025/9/13 1:49:43 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

static void BulidTarget(string name,string target) { string app_name = name; string target_dir = Application.dataPath + \ string target_name = app_name + \ BuildTargetGroup targetGroup = BuildTargetGroup.Android; BuildTarget buildTarget = BuildTarget.Android; string applicationPath = Application.dataPath.Replace(\ if(target == \ { target_dir = applicationPath + \ target_name = app_name + \ targetGroup = BuildTargetGroup.Android; } if(target == \ { target_dir = applicationPath + \ target_name = app_name; targetGroup = BuildTargetGroup.iPhone; buildTarget = BuildTarget.iPhone; } //每次build删除之前的残留 if(Directory.Exists(target_dir)) { if (File.Exists(target_name)) { File.Delete(target_name); } }else { Directory.CreateDirectory(target_dir); } //==================这里是比较重要======================= switch(name) { case \ PlayerSettings.bundleIdentifier = \ PlayerSettings.bundleVersion = \ PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,\

东西

的 break; case \ PlayerSettings.bundleIdentifier = \ PlayerSettings.bundleVersion = \ PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,\ break; case \ PlayerSettings.bundleIdentifier = \ PlayerSettings.bundleVersion = \ PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,\ break; } //==================这里是比较重要的东西======================= //开始Build场景,等待吧~ GenericBuild(SCENES, target_dir + \+ target_name, buildTarget,BuildOptions.None); } private static string[] FindEnabledEditorScenes() { List EditorScenes = new List(); foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { if (!scene.enabled) continue; EditorScenes.Add(scene.path); } return EditorScenes.ToArray(); }

static void GenericBuild(string[] scenes, string target_dir, BuildTarget build_target, BuildOptions build_options) {

EditorUserBuildSettings.SwitchActiveBuildTarget(build_target); string res = BuildPipeline.BuildPlayer(scenes,target_dir,build_target,build_options);

if (res.Length > 0) {

throw new Exception(\

} } }

这里面忘说了一点,如果我们希望在性能高的手机上用一套好的资源,在性能低的手机上用一套差一点的资源该怎么办?那么首先我们先搞清楚Unity会把什么资源打包,什么资源不打包?文章出处狗刨学习网

1.Resources文件夹

Resources文件夹是一个只读的文件夹,通过Resources.Load()来读取对象。因为这个文件夹下的所有资源都可以运行时来加载,所以

Resources文件夹下的所有东西都会被无条件的打到发布包中。建议这个文件夹下只放Prefab或者一些Object对象,因为Prefab会自动过滤掉对象上不需要的资源。举个例子我把模型文件还有贴图文件都放在了Resources文件夹下,但是我有两张贴图是没有在模型上用的,那么此时这两张没用的贴图也会被打包到发布包中。假如这里我用Prefab,那么Prefab会自动过滤到这两张不被用的贴图,这样发布包就会小一些了。

2.StreamingAssets

StreamingAssets文件夹也是一个只读的文件夹,但是它和Resources有点区别,Resources文件夹下的资源会进行一次压缩,而且也会加密,不使用点特殊办法是拿不到原始资源的。但是StreamingAssets文件夹就不一样了,它下面的所有资源不会被加密,然后是原封不动的打包到发布包中,这样很容易就拿到里面的文件。所以StreamingAssets适合放一

些二进制文件,而Resources更适合放一些GameObject和Object文件。StreamingAssets 只能用过www类来读取!!

3. 最后凡是在Hierarchy视图对象引用过的资源文件也会被无条件打包到发布包中。如果有一部分文件可能没有在Resources文件夹下也没有在StreamingAssets文件夹下,也没有被Hierarchy视图游戏对象引用,那么这类资源是不会被打包到发布包中的。

OK!搞清楚这一点就好办了!在处理不同包对应不同资源包的时候,尽量让可配置的资源放在Resources 或StreamingAssets文件夹下,运行的时候程序动态的来读取它们,最后显示在游戏中就可以了。在批量打包前,在Project视图下创建不同包的资源文件夹, 然后脚本 AssetDatabase 动态的将资源拷贝至Resources或StreamingAssets 文件夹中,

[MenuItem (\ static void PerformAndroidQQBuild () {

//先把资源拷贝到Resources或者StreamingAssets AssetDatabase.CopyAsset(\ //然后开始编译版本 BulidTarget(\ }

代码中说到还有一个重要的东西就是PlayerSettings类。因为在Build的时候不同平台下可能会有一些PlatformSettings是不一样的,所以需要在脚本里面动态的设置它。根据情况来批量构建自己的工程吧~

另外,由于IOS工程比较特殊,使用这样的方法我们只能生成出来多个IOS的工程文件,但是这并不是最终发布的版本。如果想一键生成.ipa文件的话。

1.通过命令行来Build IOS

2.2.通过shell来自动打包 1生成的xcode工程,最终生成渠道包。

好了就到这了,希望对读者有些帮助。

搜索更多关于: Unity3D之脚本批量打包渠道包研究 的文档
Unity3D之脚本批量打包渠道包研究.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c82uhi5dtbk44p5c1bro6_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top