找回密码
 注册帐号

扫一扫,访问微社区

沐冉楠 Unity自动打包工具___WEBGL自动打包

15
回复
4043
查看
[ 复制链接 ]
排名
949
昨日变化

28

主题

209

帖子

2199

积分

Rank: 9Rank: 9Rank: 9

UID
114543
好友
19
蛮牛币
9306
威望
0
注册时间
2015-7-21
在线时间
706 小时
最后登录
2020-7-9

专栏作家

2020-5-1 01:19:48 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

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;

    }

通过读本地需要打包的配置文件,就可以进行打包,
11.png 22.png 来进行这些项目打包效果:
3.png 5.png

下载地址
Webgl批量自动打包.zip (83.81 KB, 下载次数: 58, 售价: 30 蛮牛币)

点评

很好  发表于 2020-6-28 10:52
回复

使用道具 举报

3偶尔光临
277/300

1

主题

209

帖子

277

积分

Rank: 3Rank: 3Rank: 3

UID
341351
好友
0
蛮牛币
520
威望
0
注册时间
2020-2-27
在线时间
67 小时
最后登录
2020-7-5
2020-5-2 21:56:44 显示全部楼层
666666666666666666
回复 支持 反对

使用道具 举报

7日久生情
3004/5000
排名
4092
昨日变化

0

主题

2136

帖子

3004

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
2595
威望
0
注册时间
2017-11-16
在线时间
506 小时
最后登录
2020-7-11
2020-5-3 11:37:42 显示全部楼层
66666666666666666666666666
回复 支持 反对

使用道具 举报

8常驻蛮牛
7359/10000
排名
1662
昨日变化

0

主题

5328

帖子

7359

积分

Rank: 8Rank: 8

UID
185339
好友
1
蛮牛币
3409
威望
0
注册时间
2016-11-20
在线时间
1251 小时
最后登录
2020-7-10
2020-5-7 09:05:19 显示全部楼层
{:104:}
回复

使用道具 举报

8常驻蛮牛
7837/10000
排名
249
昨日变化

0

主题

4021

帖子

7837

积分

Rank: 8Rank: 8

UID
3215
好友
0
蛮牛币
21
威望
0
注册时间
2013-9-4
在线时间
1818 小时
最后登录
2020-5-23
2020-5-9 16:26:07 显示全部楼层
6666666666666666
回复 支持 反对

使用道具 举报

7日久生情
2103/5000
排名
1217
昨日变化

0

主题

222

帖子

2103

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34048
好友
0
蛮牛币
370
威望
0
注册时间
2014-7-13
在线时间
913 小时
最后登录
2020-6-20
2020-5-15 16:49:55 显示全部楼层
为什么不做AB包加载呢,直接从自己URL下的StreamingAssets中加载AB包,只用打一个空包就够了,多课件单独出包,也只用打一个,拷贝几份,每个都加载自己的资源不就行了,一个个打包也是厉害了
回复 支持 1 反对 0

使用道具 举报

0

主题

20

帖子

83

积分

Rank: 2Rank: 2

UID
346732
好友
0
蛮牛币
39
威望
0
注册时间
2020-5-11
在线时间
63 小时
最后登录
2020-7-11
2020-5-19 08:26:08 显示全部楼层
回复

使用道具 举报

排名
949
昨日变化

28

主题

209

帖子

2199

积分

Rank: 9Rank: 9Rank: 9

UID
114543
好友
19
蛮牛币
9306
威望
0
注册时间
2015-7-21
在线时间
706 小时
最后登录
2020-7-9

专栏作家

楼主 2020-5-19 16:48:22 显示全部楼层
chopperpf 发表于 2020-5-15 16:49
为什么不做AB包加载呢,直接从自己URL下的StreamingAssets中加载AB包,只用打一个空包就够了,多课件单独出 ...

这个方法可以,因为每个课件功能不一样,所有ab包就直接打包场景,然后先进空场景再读配置加载正确场景,要一个一个修改配置文件,和对应的AB场景.
回复 支持 反对

使用道具 举报

7日久生情
2103/5000
排名
1217
昨日变化

0

主题

222

帖子

2103

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34048
好友
0
蛮牛币
370
威望
0
注册时间
2014-7-13
在线时间
913 小时
最后登录
2020-6-20
2020-5-19 18:34:03 显示全部楼层
沐冉楠 发表于 2020-5-19 16:48
这个方法可以,因为每个课件功能不一样,所有ab包就直接打包场景,然后先进空场景再读配置加载正确场景,要一 ...

我的意思是每个课件都有自己的场景和配置,就每个配件打自己的ab包,写个工具,打包自己勾选的场景,每个都打出自己的包,然后各自加载各自的包和配置
回复 支持 反对

使用道具 举报

5熟悉之中
509/1000

0

主题

386

帖子

509

积分

Rank: 5Rank: 5

UID
340078
好友
0
蛮牛币
56
威望
0
注册时间
2020-2-1
在线时间
123 小时
最后登录
2020-7-12
2020-5-20 08:50:31 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

0

主题

3

帖子

3

积分

Rank: 1

UID
348407
好友
0
蛮牛币
7
威望
0
注册时间
2020-6-8
在线时间
0 小时
最后登录
2020-6-8
2020-6-8 11:10:45 显示全部楼层
6666666666
回复

使用道具 举报

排名
64946
昨日变化

0

主题

24

帖子

60

积分

Rank: 2Rank: 2

UID
24258
好友
0
蛮牛币
0
威望
0
注册时间
2014-5-8
在线时间
34 小时
最后登录
2020-6-16
2020-6-15 10:50:26 显示全部楼层
非常感谢
回复

使用道具 举报

排名
31434
昨日变化

0

主题

24

帖子

90

积分

Rank: 2Rank: 2

UID
158115
好友
0
蛮牛币
15
威望
0
注册时间
2016-7-21
在线时间
58 小时
最后登录
2020-7-7
2020-6-18 16:27:55 显示全部楼层
666666666666666666
回复 支持 反对

使用道具 举报

排名
31434
昨日变化

0

主题

24

帖子

90

积分

Rank: 2Rank: 2

UID
158115
好友
0
蛮牛币
15
威望
0
注册时间
2016-7-21
在线时间
58 小时
最后登录
2020-7-7
2020-6-18 16:47:45 显示全部楼层
666666666666666666666666
回复 支持 反对

使用道具 举报

7日久生情
1724/5000
排名
1837
昨日变化

11

主题

294

帖子

1724

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
252607
好友
5
蛮牛币
13914
威望
0
注册时间
2017-11-5
在线时间
687 小时
最后登录
2020-7-10
3 天前 显示全部楼层
好东西 收藏一波
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则