马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册帐号
x
本帖最后由 沐冉楠 于 2020-5-1 02:28 编辑
懒人推动社会进步!!!
先说说为什么写这个工具,真的是因为懒,想省事,并且节约时间,如果你使用Unity开发WEBGL,你一定经历过点下Build后漫长的等待,这时间可以去微博,知乎转一圈回来,它还不一定构建完成.尤其是在电脑配置不是很高(笔记本,i5,8g),我打包个空的WEBGL需要8分钟,更甚是课件项目需求每个课件都要打包成独立的webgl文件,轻松80个课件打包,算了下如果不离开电脑就要守候10余小时,这只是一次打包,万一改下需求,算了,疯了,一天到晚等着点build,所以就在想,能不能有工具,一键点击,然后下班,明天过来就自己打包完成了???结果找了一圈,发现两个方案,一个就是使用jenkins调用一下bat或者shell,另外一种就是自己调用UnityEditor,自己写打包的build,我查了现在大部分选择第一种方案,这个很早就有教程,但是我比较懒,还是选择用Unity解决unity的事.
进入正题:
unity编辑器里面有这个Build方法:
BuildPipeline.BuildPlayer
public static Build.Reporting.BuildReport BuildPlayer(string[] levels, string locationPathName, BuildTarget target, BuildOptions options)里面参数是(场景数组,打包完成后保存地址,打包的平台,是否运行内置播放器(一般选择BuildOptions.None))链接附上 https://docs.unity3d.com/ScriptReference/BuildPipeline.BuildPlayer.html 方法是有了,但是我来按照官方方法使用就是莫名报错(unity2018.3.14f1),可能是与版本有问题吧.所有就还了个思路,找到了SuperUnityBuild插件,这个插件是打包很好用的插件,可以一键打包理论上所有平台,并且保存打包的PlayerSettings,可惜这么好的插件不满足我的需求,不能将场景单独打包到对应地方.所以我对他进行了稍微改动来满足我的需求
首先先导入unity-build-master,因为我不是使用这个插件,只是使用部分功能,所以就不介绍这个插件了, 1.在UnityBuildWindow里面写上自己的打包方法
[C#] 纯文本查看 复制代码 [MenuItem("SuperUnityBuild/MYBuild")]
public static void MYBUILDNOWindow()
{
//执行YN自我打包
BuildProject.BuildAll();
}
BuildProject.BuildAll();是插件里面build的重写,
进入到BuildProject里面,发现前面全部都是进行打包前的检查,最后执行打包的方法和官方文档一样
[C#] 纯文本查看 复制代码 UnityEditor.Build.Reporting.BuildReport buildReport = BuildPipeline.BuildPlayer(releaseType.sceneList.GetSceneFileList(), Path.Combine(buildPath, binName), architecture.target, options);
所以就要在这里进行更改,
[C#] 纯文本查看 复制代码 string[] levels = BuildInfomation.levels;
string parth = BuildInfomation.Pathlevels;
Debug.Log(parth);
UnityEditor.Build.Reporting.BuildReport buildReport = BuildPipeline.BuildPlayer(levels, parth, BuildTarget.WebGL, BuildOptions.None);
foreach (var item in releaseType.sceneList.GetSceneFileList())
{
Debug.Log(item);
}
if (buildReport.summary.result == UnityEditor.Build.Reporting.BuildResult.Failed)
error = buildReport.summary.totalErrors + " occurred.";
#else
error = BuildPipeline.BuildPlayer(releaseType.sceneList.GetSceneFileList(), Path.Combine(buildPath, binName), architecture.target, options);
#endif
if (!string.IsNullOrEmpty(error))
{
success = false;
BuildNotificationList.instance.AddNotification(new BuildNotification(
BuildNotification.Category.Error,
"Build Failed:", configKey.ToString() + "\n" + error,
true, null));
}
// Post-build actions.
PerformPostBuild(releaseType, platform, architecture, distribution, buildTime, ref options, configKey, buildPath);
// Restore pre-build settings.
PlayerSettings.SetScriptingDefineSymbolsForGroup(platform.targetGroup, preBuildDefines);
PlayerSettings.companyName = preBuildCompanyName;
PlayerSettings.productName = preBuildProductName;
#if UNITY_5_6_OR_NEWER
PlayerSettings.SetApplicationIdentifier(platform.targetGroup, preBuildBundleIdentifier);
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Build_Over_Num++;
Debug.Log("这里是北京时间:"+ System.DateTime.Now + " 完成了___ "+Build_Over_Num+" ___个");
if (Build_Over_Num<File.ReadAllLines(Application.dataPath + "/Pathlevels.txt", Encoding.Default).Length)
{
BuildInfomation.Pathlevels = File.ReadAllLines(Application.dataPath + "/Pathlevels.txt", Encoding.Default)[Build_Over_Num];
BuildInfomation.levels = new string[] { File.ReadAllLines(Application.dataPath + "/levels.txt", Encoding.Default)[Build_Over_Num] };
BuildProject.BuildAll();
}
else
{
Debug.Log("这里是北京时间:" + System.DateTime.Now + " 全部完成了!!!!!!全部完成了!!!!!!全部完成了!!!!!!一共有 " + Build_Over_Num + "个");
Build_Over_Num = 0;
}
return success;
}
通过读本地需要打包的配置文件,就可以进行打包,
和
来进行这些项目打包效果:
和
下载地址
Webgl批量自动打包.zip
(83.81 KB, 下载次数: 67, 售价: 30 蛮牛币)
|