Unity自动化打包注意事项

问题描述

使用Unity手册上介绍的程序启动参数,在不打开Unity Editor界面的情况下自动执行C#代码,可以实现自动打包。如果是专门打包iOS包的话,一切OK。但是一旦在Android与iOS之间切换,就会发现iOS的PostProcessBuild标记的后处理代码没有执行,造成打包流程出错。

解决方案

出现该问题的原因是iOS平台特定代码通常是使用#if UNITY_IOS的宏定义包裹。如果项目之前是非iOS平台,使用命令行方式启动Unity直接运行打包方法,那么其中的iOS平台相关代码都是不存在的。

正确的做法是首先切换到构建目标平台,待相关Editor脚本都生效后,再执行构建操作。

同样的道理,在构建方法里调用Unity提供的切换平台方法是没有意义的。C#代码不可能执行到一半,重新编译并加载后还能从中断处继续执行。

对于命令行方式实现的自动打包方案来说,需要添加 -buildTarget 参数。该参数的生效是比 -executeMethod 更早一些。所以可以实现先切换到目录平台,所有脚本都正确后再执行给定的静态方法。

下面是一个命令行调用Unity的例子,以供参考:

/Applications/Unity/Unity.app/Contents/MacOS/Unity -buildTarget iOS -batchmode -projectPath \"$PWD/unity/open3d\" -executeMethod Build.DoBuildIOS -quit -logFile

参考

Unity Manual 关于命令行方式启动Unity的介绍,Command line arguments,https://docs.unity3d.com/Manual/CommandLineArguments.html

你可能感兴趣的:(Unity自动化打包注意事项)