<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                上篇文章中實現了基本的打包功能,在這篇我們來解決不同平臺打 AB 包的問題。 本篇文章的核心 api 還是: ```cs BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget); ``` 在第三個參數中,只要傳入不同平臺 BuildTarget 就可以了。目前只考慮 Android 和 iOS 平臺。 ## 區分 iOS、Android 平臺 很簡單,只要在上篇文章的 QABEditor 類中將原來的 BuildAssetBundle 方法分為 BuildAssetBundleiOS 和BuildAssetBundleAndroid 即可。代碼如下所示。 ```cs public class QABEditor { [MenuItem("QFramework/AB/Build iOS")] public static void BuildABiOS() { string outputPath = QPath.ABBuildOutPutDir (RuntimePlatform.IPhonePlayer); QIO.CreateDirIfNotExists (outputPath); QABBuilder.BuildAssetBundles (BuildTarget.iOS); AssetDatabase.Refresh (); } [MenuItem("QFramework/AB/Build Android")] public static void BuildABAndroid() { string outputPath = QPath.ABBuildOutPutDir (RuntimePlatform.Android); QIO.CreateDirIfNotExists (outputPath); QABBuilder.BuildAssetBundles (BuildTarget.Android); AssetDatabase.Refresh (); } } ``` 大家覺得代碼中有幾個類有些陌生。下面我來一一介紹下。 ## QPath.ABBuildOutPutDir(build target) QPath 這個類在我的框架中是用來指定固定的路徑用的,因為路徑的代碼全是字符串,不能讓字符串暴露在各處都是,這樣會影響代碼的可讀性。統一管理起來比較方便修改。ABBuildOutPutDir 這個 API 的實現如下所示,就不多說了。 ```cs /// <summary> /// 所有的路徑常量都在這里 /// </summary> public class QPath { /// <summary> /// 資源輸出的路徑 /// </summary> public static string ABBuildOutPutDir(RuntimePlatform platform) { string retDirPath = null; switch (platform) { case RuntimePlatform.Android: retDirPath = Application.streamingAssetsPath + "/QAB/Android"; break; case RuntimePlatform.IPhonePlayer: retDirPath = Application.streamingAssetsPath + "/QAB/iOS"; break; case RuntimePlatform.WindowsPlayer: case RuntimePlatform.WindowsEditor: retDirPath = Application.streamingAssetsPath + "/QAB/Windows"; break; case RuntimePlatform.OSXPlayer: case RuntimePlatform.OSXEditor: retDirPath = Application.streamingAssetsPath + "/QAB/OSX"; break; } return retDirPath; } /// <summary> /// 打包之前的源資源文件 /// </summary> public static string SrcABDir { get { return Application.dataPath + "/QArt/QAB"; } } } } ``` ## QIO.CreateDirIfNotExists (outputPath) QIO 這個類是用來封裝 C# 的 System.IO 和一些文件操作相關的 API。CreateDirIfNotExists 這個命名非常的傻瓜,會點英文就應該可以理解了。下面貼出實現代碼, ```cs using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 各種文件的讀寫復制操作,主要是對System.IO的一些封裝 /// </summary> namespace QFramework { public class QIO { /// <summary> /// 創建新的文件夾,如果存在則不創建 /// </summary> public static void CreateDirIfNotExists(string dirFullPath) { if (!Directory.Exists (dirFullPath)) { Directory.CreateDirectory (dirFullPath); } } } } ``` ## QABBuilder QABBuilder 只是封裝了本文的核心 API ```cs BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget); ``` 封裝的原因是打 AB 包成功后,要對 AB 包進行一些處理,比如計算包尺寸,計算哈希或者 md5 值。主要是為了以后的熱更新做準備的。看下 QABBuilder 核心實現. ```cs public class QABBuilder { public static string overloadedDevelopmentServerURL = ""; public static void BuildAssetBundles(BuildTarget buildTarget) { string outputPath = Path.Combine(QPlatform.ABundlesOutputPath, QPlatform.GetPlatformName()); if (Directory.Exists (outputPath)) { Directory.Delete (outputPath,true); } Directory.CreateDirectory (outputPath); BuildPipeline.BuildAssetBundles(outputPath,BuildAssetBundleOptions.None,buildTarget); GenerateVersionConfig (outputPath); if(Directory.Exists(Application.streamingAssetsPath+"/QAB")){ Directory.Delete (Application.streamingAssetsPath+"/QAB",true); } Directory.CreateDirectory (Application.streamingAssetsPath+"/QAB"); FileUtil.ReplaceDirectory (QPlatform.ABundlesOutputPath,Application.streamingAssetsPath+"/QAB"); AssetDatabase.Refresh (); } } } ``` ## 使用方式 按這里 ![DraggedImage.png](http://file.liangxiegame.com/f1141903-769a-4cac-99f1-4cc489a97176.png) 結果看這里(創建了iOS文件夾) ![DraggedImage-1.png](http://file.liangxiegame.com/0403dc50-56aa-4020-8d32-76ffc062c6ae.png) 介紹完畢,睡覺了! ## 歡迎討論! 轉載請注明地址:涼鞋的筆記:[liangxiegame.com](http://liangxiegame.com) ## 更多內容 * QFramework 地址:[https://github.com/liangxiegame/QFramework](https://github.com/liangxiegame/QFramework) * QQ 交流群:[623597263](http://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce66) * **Unity 進階小班**: * 主要訓練內容: * 框架搭建訓練(第一年) * 跟著案例學 Shader(第一年) * 副業的孵化(第二年、第三年) * 權益、授課形式等具體詳情請查看[《小班產品手冊》](https://liangxiegame.com/master/intro):https://liangxiegame.com/master/intro * 關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。 ![](http://file.liangxiegame.com/38eccb55-40b2-4845-93d6-f5fb50ff9492.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看