Unityゲームフレームワーク構築(十二)簡易AssetBundleパッケージツール(二)
31083 ワード
前の文章では基本的なパッケージ機能を実現し、この文章では異なるプラットフォームでABパッケージを打つ問題を解決します.この記事のコアapiは、次のとおりです.
3番目のパラメータでは、異なるプラットフォームBuildTargetに転送すればよい.現在はAndroidとiOSプラットフォームのみを考慮しています.
iOS、Androidプラットフォームを区別します.
簡単ですが、前述のQABEditorクラスで元のBuildAssetBundleメソッドをBuildAssetBundleiOSとBuildAssetBundleAndroidに分類すればいいです.コードは以下の通りです.
コードにはいくつかのクラスがあると思います.以下、一つ一つ紹介します.
QPath.ABBuildOutPutDir(build target)
このクラスは私のフレームワークで固定されたパスを指定するために使用されています.パスのコードはすべて文字列なので、文字列をあちこちに露出させることはできません.これはコードの可読性に影響します.統一的に管理すると修正しやすい.ABBuildOutPutDirというAPIの実現は以下の通りであり,多くは言わない.
パッケージの原因は、ABパッケージが成功した後、パケットサイズの計算、ハッシュまたはmd 5値の計算など、ABパッケージに対していくつかの処理を行うことである.主に今後の熱更新のために準備しています.QCBuilderコアの実現を見てみましょう.
使用方法
(iOSフォルダが作成されています)
紹介が終わり、寝ました!
BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget);
3番目のパラメータでは、異なるプラットフォームBuildTargetに転送すればよい.現在はAndroidとiOSプラットフォームのみを考慮しています.
iOS、Androidプラットフォームを区別します.
簡単ですが、前述のQABEditorクラスで元のBuildAssetBundleメソッドをBuildAssetBundleiOSとBuildAssetBundleAndroidに分類すればいいです.コードは以下の通りです.
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)
このクラスは私のフレームワークで固定されたパスを指定するために使用されています.パスのコードはすべて文字列なので、文字列をあちこちに露出させることはできません.これはコードの可読性に影響します.統一的に管理すると修正しやすい.ABBuildOutPutDirというAPIの実現は以下の通りであり,多くは言わない.
///
///
///
public class QPath
{
///
///
///
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;
}
///
///
///
public static string SrcABDir {
get {
return Application.dataPath + "/QArt/QAB";
}
}
}
}
QIO.CreateDirIfNotExists (outputPath)
QIO这个类是用来封装C#的System.IO和一些文件操作相关的API。CreateDirIfNotExists这个命名非常的傻瓜,会点英文就应该可以理解了。下面贴出实现代码,
using UnityEngine;
using System.Collections;
using System.IO;
///
/// , System.IO
///
namespace QFramework {
public class QIO {
///
/// ,
///
public static void CreateDirIfNotExists(string dirFullPath)
{
if (!Directory.Exists (dirFullPath)) {
Directory.CreateDirectory (dirFullPath);
}
}
}
}
QABBuilder
QABBuilder只是封装了本文的核心API
BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget);
パッケージの原因は、ABパッケージが成功した後、パケットサイズの計算、ハッシュまたはmd 5値の計算など、ABパッケージに対していくつかの処理を行うことである.主に今後の熱更新のために準備しています.QCBuilderコアの実現を見てみましょう.
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 ();
}
}
}
使用方法
(iOSフォルダが作成されています)
紹介が終わり、寝ました!