找回密碼
 注冊帳號

掃一掃,訪問微社區

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

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

28

主題

209

帖子

2199

積分

Rank: 9Rank: 9Rank: 9

UID
114543
好友
19
蠻牛幣
9306
威望
0
注冊時間
2015-7-21
在線時間
706 小時
最后登錄
2020-7-9

專欄作家

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

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

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, 下載次數: 58, 售價: 30 蠻牛幣)
另外SuperBuild的鏈接也給大家:https://github.com/Chaser324/unity-build





點評

很好  發表于 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日久生情
3026/5000
排名
4092
昨日變化

0

主題

2153

帖子

3026

積分

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

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

使用道具 舉報

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

0

主題

5378

帖子

7438

積分

Rank: 8Rank: 8

UID
185339
好友
1
蠻牛幣
3403
威望
0
注冊時間
2016-11-20
在線時間
1280 小時
最后登錄
2020-7-17
地板
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
5#
2020-5-9 16:26:07 只看該作者
6666666666666666
回復 支持 反對

使用道具 舉報

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

0

主題

222

帖子

2105

積分

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

UID
34048
好友
0
蠻牛幣
356
威望
0
注冊時間
2014-7-13
在線時間
915 小時
最后登錄
2020-7-16
6#
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
7#
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

專欄作家

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

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

使用道具 舉報

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

0

主題

222

帖子

2105

積分

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

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

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

使用道具 舉報

5熟悉之中
537/1000

0

主題

403

帖子

537

積分

Rank: 5Rank: 5

UID
340078
好友
0
蠻牛幣
5
威望
0
注冊時間
2020-2-1
在線時間
134 小時
最后登錄
2020-7-18
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
回復

使用道具 舉報

排名
64946
昨日變化

0

主題

24

帖子

60

積分

Rank: 2Rank: 2

UID
24258
好友
0
蠻牛幣
0
威望
0
注冊時間
2014-5-8
在線時間
34 小時
最后登錄
2020-6-16
12#
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
13#
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
14#
2020-6-18 16:47:45 只看該作者
666666666666666666666666
回復 支持 反對

使用道具 舉報

7日久生情
1729/5000
排名
1837
昨日變化

11

主題

294

帖子

1729

積分

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

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

使用道具 舉報

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

本版積分規則

神马电影34pp影视午夜