IOSビルドでUnity Assetbundleを動作させることができません。
Unityで、アセットバンドルを作成します。
using UnityEditor;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS);
}
}
そして、それらはUnityで正常に動作します。一緒に使う
AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString());
および/または
WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString(), 4);
(「file://」接頭辞がないと、バンドルはUnityでもXcodeでも機能しません)
プロジェクトをXcodeにビルドしてXcodeで実行すると、次のエラーが発生します。
アーカイブファイルを開けません:/ Users/user/Documents/Workspaces/unityproject/Assets/AssetBundles/iOS/lchairanimations
どういうわけか正しいパスの設定に関連している可能性がありますが、後でassetbundleフォルダーをXcodeプロジェクトにコピーしたため、問題は解決しません。
以下のこの例では、 "dog"という新しいアセットを "animalsという名前のAssetBundleに追加する方法を示します"ビルドして、実行時にロードします。
ビルドフォルダーのセットアップ:
1。画像ファイルなどのアセットを選択します。この場合、これは "dog.jpeg"ファイルです。 「インスペクタ」タブのメニューをご覧ください。 AssetBundleオプションが非表示になっている場合は、上にドラッグして表示します。これを行う方法については、以下のアニメーションgifを参照してください。 デフォルトのAssetBundleは「なし」です。 「なし」オプションをクリックして、「新規」に移動しますオプションを使用して新しいAssetBundleを作成し、「animals」という名前を付けます
2。 AssetsフォルダーにStreamingAssets
という名前のフォルダーを作成します。これは、AssetBundleを作成するフォルダーです。スペルは重要であり、大文字と小文字が区別されるため、正しく名前を付けてください。
3。 StreamingAssets
フォルダーにAssetBundleを保持するサブフォルダーを作成します。この例では、このフォルダーにAssetBundles
という名前を付けて、その中にあるものを認識できるようにします。
Building AssetBundle:
4。以下はビルドスクリプトです。
[〜#〜] a [〜#〜]。 ExportAssetBundles
という名前のスクリプトを作成し、Assetsフォルダー内の "Editor"という名前のフォルダーに入れてから、その下のコードをコピーします。
using System.IO;
using UnityEditor;
using UnityEngine;
public class ExportAssetBundles
{
[MenuItem("Assets/Build AssetBundle")]
static void ExportResource()
{
string folderName = "AssetBundles";
string filePath = Path.Combine(Application.streamingAssetsPath, folderName);
//Build for Windows platform
BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
//Uncomment to build for other platforms
//BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.iOS);
//BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.Android);
//BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.WebGL);
//BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);
//Refresh the Project folder
AssetDatabase.Refresh();
}
}
[〜#〜] b [〜#〜]。 Assets->Build AssetBundleメニューに移動してAssetBudleをビルドします。
ビルドされたAssetBundlesがAssets/StreamingAssets/AssetBundles
ディレクトリ内に表示されます。そうでない場合は、[プロジェクト]タブを更新します。
実行時にAssetBundleをロードしています:
5。それをロードするときは、StreamingAssets
フォルダーにアクセスするためにApplication.streamingAssetsPath
を使用する必要があります。すべてのフォルダにアクセスするには、Application.streamingAssetsPath + "/AssetBundle/" + assetbunlenameWithoutExtension;
を使用します。 AssetBundle
およびAssetBundleRequest
APIは、AssetBundleをロードするために使用されます。これは画像なので、Texture2D
が渡されます。プレハブを使用する場合は、代わりにGameObject
を渡してインスタンス化します。これらの変更を行う場所については、コード内のコメントを参照してください。パス名を組み合わせるにはPath.Combine
を使用することをお勧めします。そのため、以下のコードでは代わりにそれを使用する必要があります。
以下は単純なロード関数です:
IEnumerator LoadAsset(string assetBundleName, string objectNameToLoad)
{
string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "AssetBundles");
filePath = System.IO.Path.Combine(filePath, assetBundleName);
//Load "animals" AssetBundle
var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(filePath);
yield return assetBundleCreateRequest;
AssetBundle asseBundle = assetBundleCreateRequest.assetBundle;
//Load the "dog" Asset (Use Texture2D since it's a Texture. Use GameObject if prefab)
AssetBundleRequest asset = asseBundle.LoadAssetAsync<Texture2D>(objectNameToLoad);
yield return asset;
//Retrieve the object (Use Texture2D since it's a Texture. Use GameObject if prefab)
Texture2D loadedAsset = asset.asset as Texture2D;
//Do something with the loaded loadedAsset object (Load to RawImage for example)
image.texture = loadedAsset;
}
ノートをロードする前の注意事項:
[〜#〜] a [〜#〜]。 Assetbundleの名前はanimals
です。
[〜#〜] b [〜#〜]。動物からロードするアセット/オブジェクトの名前Assetbundleはdog
犬の単純なjpgです。
[〜#〜] c [〜#〜]。読み込みは次のように簡単です:
string nameOfAssetBundle = "animals";
string nameOfObjectToLoad = "dog";
public RawImage image;
void Start()
{
StartCoroutine(LoadAsset(nameOfAssetBundle, nameOfObjectToLoad));
}
.Netベースのものがもっと欲しい私のような開発者にとって、より融通が利くかもしれないという提案もあります。 Unityを使用して「ランチャー」を構築することを検討するかもしれません。 Unityを使用してビルドするので、クロスプラットフォームのままです。次に、更新をDLLにバンドルすることを検討してください。Unityは.Netフレームワークをサポートしているため、またはWebフォルダーにイメージとして保存します。Webclientを使用してデータを取得できます。こちらの記事:
ランチャーは、コンテンツを取得または更新するためのより良い方法かもしれません。ロードオブザリングをオンラインでプレイして以来、私はそのアイデアをいじくり続けており、ランチャーが好きです。自分のゲーム用に作りたかったんです。コードでは、「DownloadFile(Uri、String)」を使用してデータを取得します。私はまずAPIまたは何かを使用して、ゲームの現在のバージョンまたはDLLなど)を確認します。次に、最新バージョンのデータベースを確認します。最後に、APIまたは何かで新しいファイルのリストを作成できます必要または更新されたファイルが必要であり、ファイルのリクエストをループして、必要なファイルをダウンロードします。