ニュース

Top  >   7. Scene・Prefab・Asset管理  >   Q, アセットを後からダウンロードする仕組みを作りたい

Q, アセットを後からダウンロードする仕組みを作りたい

2026/03/18

メインコンテンツへスキップ
< すべてのカテゴリに戻る

A,結論

後からアセットをダウンロードする仕組みは、Addressables を使う構成が最も扱いやすいです。

原因 / 背景

  • Prefab やテクスチャ、音声などをビルド本体から切り離して、必要なときに読み込めるためです。
  • XR では初回容量削減とコンテンツ更新の両面で効果があります。

実装 / 手順

  1. 対象アセットを Addressable として登録し、ローカル配信かリモート配信かを決めます。
  2. 起動時にカタログ更新を確認し、必要なキーだけ非同期ロードしてください。
  3. 読み込み失敗時の再試行、進行表示、キャッシュ戦略も合わせて設計すると運用しやすくなります。

外部から配信する場合はGroupのBuild Path / Load PathをRemoteに設定し、対象プラットフォーム用コンテンツをビルドしてカタログ・バンドルを配信先へ配置します。サンプルは生成部分であり、サーバー公開やカタログ更新を自動構築するものではありません。

サンプルコード

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class AddressablesPrefabLoader : MonoBehaviour
{
    [SerializeField] private AssetReferenceGameObject prefabReference;
    [SerializeField] private Transform spawnPoint;
    private GameObject instance;
    private bool loading;

    public void LoadAndInstantiate()
    {
        if (loading || instance != null) return;
        if (prefabReference == null || !prefabReference.RuntimeKeyIsValid())
        {
            Debug.LogWarning("AddressableのPrefabを指定してください。");
            return;
        }
        loading = true;
        var position = spawnPoint != null ? spawnPoint.position : Vector3.zero;
        var rotation = spawnPoint != null ? spawnPoint.rotation : Quaternion.identity;
        Addressables.InstantiateAsync(prefabReference, position, rotation)
            .Completed += OnCompleted;
    }

    private void OnCompleted(AsyncOperationHandle<GameObject> handle)
    {
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            if (this == null)
                Addressables.ReleaseInstance(handle);
            else
                instance = handle.Result;
        }
        else
        {
            Debug.LogError("Addressablesの生成に失敗しました。");
            Addressables.Release(handle);
        }
        if (this != null) loading = false;
    }

    private void OnDestroy()
    {
        if (instance != null) Addressables.ReleaseInstance(instance);
    }
}

※ 実機確認が必要な項目は、Editor だけで判断せず対象デバイスでも必ず動作確認してください。

難易度:Level 3(中級)
対象プラットフォーム:Android,iOS,Unity
関連キーワード:Addressables,アドレッサブル,リソース管理,動的読み込み

Level 1-2 向けバナーLevel 3-5 向けバナー 1Level 3-5 向けバナー 2