Unity之多场景自动化打包研究
公司老大说了,你这手动打包的,肯定会出错的,人怎么能和机器比精准。之前负责过Jenkins流程,对于自动化部分也有研究。自动化是真的好,配置好后就等着收果子,真是爽快无比!项目背景:web端无数个场景需要分别打包,打包的时候需要配置不同的模板,还需要配置不同的背景图片和参数。总计30个场景。重要的放在前面,外部cmd调用unity函数命令里面的参数具体自己去查,网上很多。此命令配置到jenkins
·
公司老大说了,你这手动打包的,肯定会出错的,人怎么能和机器比精准。
之前负责过Jenkins流程,对于自动化部分也有研究。
自动化是真的好,配置好后就等着收果子,真是爽快无比!
项目背景:web端无数个场景需要分别打包,打包的时候需要配置不同的模板,还需要配置不同的背景图片和参数。总计30个场景。
重要的放在前面,外部cmd调用unity函数
命令里面的参数具体自己去查,网上很多。此命令配置到jenkins或者git库中都可使用。
C:\"Program Files"\Unity\Editor\unity.exe -projectpath G:\EngoPro\unityrosproject\RobotMaster -quit -batchmode -executeMethod AutoPack.PackAllScence -logFile "D:\log.txt"
1、打包前需要先assetbunde一下,更新下资源文件。
2、开始选择打包的场景文件
public static void Pack(string [] path_Floor)
{
string[] paths = path_Floor;
BuildAllAssetBundles();
HashSet<string> sceneNames = new HashSet<string>();
//指定场景所在的文件夹名称,如果是“Assets”,则代表工程里面所有的场景
string[] sceneArr = AssetDatabase.FindAssets("t:Scene", paths);
foreach (string scene in sceneArr)
{
sceneNames.Add(AssetDatabase.GUIDToAssetPath(scene));
}
List<EditorBuildSettingsScene> scenes = new List<EditorBuildSettingsScene>() { };
foreach (string scensName in sceneNames)
{
if (scensName.Contains("Company") || scensName.Contains("ArtConfig") || scensName.Contains("Test")
|| scensName.Contains("UIScene") || scensName.Contains("Robot") || scensName.Contains("mdoelChange"))
{
//Debug.Log("无效场景: " + scensName);
}
else
{
//选择要打包的场景
scenes.Clear();
scenes.Add(new EditorBuildSettingsScene(scensName, true));
//Debug.Log("PreScenceName: " + scensName);
EditorBuildSettings.scenes = scenes.ToArray();
//更改PlaySetting配置
ChangePlaySetting(scensName);
//打包
Build(scensName);
}
}
}
3、实际打包代码
static void Build(string scenesName)
{
Debug.Log("Build Succeeded " + scenesName);
BuildTarget target = BuildTarget.WebGL;
BuildReport report = BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, save_path, target, BuildOptions.AcceptExternalModificationsToPlayer);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
//Debug.Log("Build Succeeded " + scenesName);
}
if (summary.result == BuildResult.Failed)
{
Debug.Log("Build failed!!!!!!!!!!!!!!!!!!!!! " + scenesName);
}
}
END!!!
附加一:现在有个问题,几十个包打包时间很慢,怎么增快速度
官方文档还是给力!!!超赞的
兄弟们,点个赞呗,激情易退,热血难凉。
附赠图片一张。
更多推荐
已为社区贡献1条内容
所有评论(0)