找回密碼
 注冊帳號

掃一掃,訪問微社區

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

24
回復
11912
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
排名
949
昨日變化

32

主題

222

帖子

2294

積分

Rank: 9Rank: 9Rank: 9

UID
114543
好友
20
蠻牛幣
10220
威望
0
注冊時間
2015-7-21
在線時間
784 小時
最后登錄
2020-11-23

專欄作家

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

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 蠻牛幣)
另外SuperBuild的鏈接也給大家:https://github.com/Chaser324/unity-build





點評

很好  發表于 2020-6-28 10:52
回復

使用道具 舉報

4四處流浪
358/500

1

主題

275

帖子

358

積分

Rank: 4

UID
341351
好友
0
蠻牛幣
669
威望
0
注冊時間
2020-2-27
在線時間
82 小時
最后登錄
2020-11-25
沙發
2020-5-2 21:56:44 只看該作者
666666666666666666
回復 支持 反對

使用道具 舉報

7日久生情
3318/5000
排名
4092
昨日變化

0

主題

2380

帖子

3318

積分

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

UID
254705
好友
1
蠻牛幣
2853
威望
0
注冊時間
2017-11-16
在線時間
576 小時
最后登錄
2020-11-27
板凳
2020-5-3 11:37:42 只看該作者
66666666666666666666666666
回復 支持 反對

使用道具 舉報

8常駐蠻牛
8985/10000
排名
1662
昨日變化

0

主題

6275

帖子

8985

積分

Rank: 8Rank: 8

UID
185339
好友
1
蠻牛幣
2083
威望
0
注冊時間
2016-11-20
在線時間
1930 小時
最后登錄
2020-11-27
地板
2020-5-7 09:05:19 只看該作者
{:104:}{:104:}{:104:}
回復

使用道具 舉報

8常駐蠻牛
7837/10000
排名
250
昨日變化

0

主題

4021

帖子

7837

積分

Rank: 8Rank: 8

UID
3215
好友
0
蠻牛幣
21
威望
0
注冊時間
2013-9-4
在線時間
1818 小時
最后登錄
2020-5-23
5#
2020-5-9 16:26:07 只看該作者
6666666666666666
回復 支持 1 反對 0

使用道具 舉報

7日久生情
2166/5000
排名
1217
昨日變化

0

主題

224

帖子

2166

積分

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

UID
34048
好友
0
蠻牛幣
305
威望
0
注冊時間
2014-7-13
在線時間
974 小時
最后登錄
2020-11-14
6#
2020-5-15 16:49:55 只看該作者
為什么不做AB包加載呢,直接從自己URL下的StreamingAssets中加載AB包,只用打一個空包就夠了,多課件單獨出包,也只用打一個,拷貝幾份,每個都加載自己的資源不就行了,一個個打包也是厲害了
回復 支持 2 反對 0

使用道具 舉報

3偶爾光臨
271/300

0

主題

27

帖子

271

積分

Rank: 3Rank: 3Rank: 3

UID
346732
好友
0
蠻牛幣
158
威望
0
注冊時間
2020-5-11
在線時間
244 小時
最后登錄
2020-11-6
7#
2020-5-19 08:26:08 只看該作者
{:105:}{:105:}
回復

使用道具 舉報

排名
949
昨日變化

32

主題

222

帖子

2294

積分

Rank: 9Rank: 9Rank: 9

UID
114543
好友
20
蠻牛幣
10220
威望
0
注冊時間
2015-7-21
在線時間
784 小時
最后登錄
2020-11-23

專欄作家

8#
樓主 2020-5-19 16:48:22 只看該作者
chopperpf 發表于 2020-5-15 16:49
為什么不做AB包加載呢,直接從自己URL下的StreamingAssets中加載AB包,只用打一個空包就夠了,多課件單獨出 ...

這個方法可以,因為每個課件功能不一樣,所有ab包就直接打包場景,然后先進空場景再讀配置加載正確場景,要一個一個修改配置文件,和對應的AB場景.
回復 支持 反對

使用道具 舉報

7日久生情
2166/5000
排名
1217
昨日變化

0

主題

224

帖子

2166

積分

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

UID
34048
好友
0
蠻牛幣
305
威望
0
注冊時間
2014-7-13
在線時間
974 小時
最后登錄
2020-11-14
9#
2020-5-19 18:34:03 只看該作者
沐冉楠 發表于 2020-5-19 16:48
這個方法可以,因為每個課件功能不一樣,所有ab包就直接打包場景,然后先進空場景再讀配置加載正確場景,要一 ...

我的意思是每個課件都有自己的場景和配置,就每個配件打自己的ab包,寫個工具,打包自己勾選的場景,每個都打出自己的包,然后各自加載各自的包和配置
回復 支持 反對

使用道具 舉報

5熟悉之中
851/1000

0

主題

560

帖子

851

積分

Rank: 5Rank: 5

UID
340078
好友
0
蠻牛幣
195
威望
0
注冊時間
2020-2-1
在線時間
291 小時
最后登錄
2020-11-7
10#
2020-5-20 08:50:31 只看該作者
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
回復 支持 反對

使用道具 舉報

0

主題

3

帖子

3

積分

Rank: 1

UID
348407
好友
0
蠻牛幣
7
威望
0
注冊時間
2020-6-8
在線時間
0 小時
最后登錄
2020-6-8
11#
2020-6-8 11:10:45 只看該作者
6666666666
回復

使用道具 舉報

2初來乍到
111/150
排名
64950
昨日變化

0

主題

32

帖子

111

積分

Rank: 2Rank: 2

UID
24258
好友
0
蠻牛幣
3
威望
0
注冊時間
2014-5-8
在線時間
93 小時
最后登錄
2020-9-17
12#
2020-6-15 10:50:26 只看該作者
非常感謝
回復

使用道具 舉報

排名
31436
昨日變化

0

主題

24

帖子

96

積分

Rank: 2Rank: 2

UID
158115
好友
0
蠻牛幣
17
威望
0
注冊時間
2016-7-21
在線時間
62 小時
最后登錄
2020-8-4
13#
2020-6-18 16:27:55 只看該作者
666666666666666666
回復 支持 反對

使用道具 舉報

排名
31436
昨日變化

0

主題

24

帖子

96

積分

Rank: 2Rank: 2

UID
158115
好友
0
蠻牛幣
17
威望
0
注冊時間
2016-7-21
在線時間
62 小時
最后登錄
2020-8-4
14#
2020-6-18 16:47:45 只看該作者
666666666666666666666666
回復 支持 反對

使用道具 舉報

7日久生情
1859/5000
排名
1838
昨日變化

11

主題

296

帖子

1859

積分

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

UID
252607
好友
5
蠻牛幣
13839
威望
0
注冊時間
2017-11-5
在線時間
820 小時
最后登錄
2020-11-27
15#
2020-7-10 10:58:23 只看該作者
好東西 收藏一波
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

内蒙古麻将app 南京麻将进园子下载 快乐8下载专用app 南粤风采26选5历史开奖结果 青海11选5中奖查询 欢乐捕鱼之海底极乐 明星上海麻将输了800分 广西河池麻将1元群 金牛安卓棋牌 快乐十分选前三组技巧 甘肃快三推荐 腾讯出的炸金花游戏 456官网棋牌 老北京pk赛车计划 快3玩法有会一吗 大乐透杀号360 贵州十一选前三遗漏