docs.unity3d.com
    目次を表示する/隠す

    AssetReference

    AssetReference は、Addressable アセットを参照できる型です。

    AssetReference クラスは MonoBehaviour または ScriptableObject で使用します。これらのクラスのいずれかにシリアル化可能な AssetReference フィールドを追加すると、Inspector ウィンドウでそのフィールドに値を割り当てることができます。フィールドに割り当てることができるアセットは、タイプとラベルで制限できます。

    画像の代替テキスト
    複数の AssetReference フィールドが表示された Inspector ウィンドウ

    値を割り当てるには、フィールドにアセットをドラッグするか、オブジェクトピッカーのアイコンをクリックしてダイアログを開き、そこで Addressable アセットを選択します。

    Addressable でないアセットを AssetReference フィールドにドラッグすると、そのアセットは自動的に Addressable になり、デフォルトの Addressables グループに追加されます。Sprite アセットと Sprite Atlas アセットにはサブオブジェクトを含めることができます。これらのタイプのアセットが割り当てられた AssetReferences では、追加のオブジェクトピッカーが表示され、そこで参照先のサブオブジェクトを指定できます。

    プロジェクトでの AssetReferences の使用例については、Addressables-Sample リポジトリの AssetReference、Component Reference、および Sprite Land プロジェクトを参照してください。

    Important

    グループのアセットを AssetReference フィールドに割り当てるには、グループの詳細設定で Include GUID in Catalog オプションが有効になっている必要があります。Include GUID in Catalog オプションはデフォルトで有効になっています。

    AssetReference 型

    Addressables API には、一般的なタイプのアセット向けの AssetReference サブクラスが用意されています。その他のタイプのアセットに AssetReference フィールドを制限するには、ジェネリックサブクラスである AssetReferenceT<TObject> を使用できます。

    AssetReference 型には以下があります。

    • AssetReference: あらゆるタイプのアセットを参照できます。
    • AssetReferenceT<TObject>: TObject と同じ型のアセットを参照できます。
    • AssetReferenceTexture: Texture アセットを参照できます。
    • AssetReferenceTexture2D: Texture2D アセットを参照できます。
    • AssetReferenceTexture3D: Texture3D アセットを参照できます。
    • AssetReferenceGameObject: Prefab アセットを参照できます。
    • AssetReferenceAtlasedSprite: [Sprite Atlas] アセットを参照できます。
    • AssetReferenceSprite: 1 つの Sprite アセットを参照できます。
    Note

    ジェネリック AssetReferenceT で CustomPropertyDrawer を使用したい (または、2020.1 より前のバージョンの Unity を使用している) 場合、カスタムの AssetReference タイプをサポートするには、具体的なサブクラスを作成する必要があります。

    クラスへ AssetReference フィールドを加える

    クラスへシリアル化可能フィールドとして宣言することにより、AssetReference またはそのサブクラスの 1 つを MonoBehaviour または ScriptableObject に加えます。

    
    using System;
    using UnityEngine;
    using UnityEngine.AddressableAssets;
    
    internal class DeclaringReferences : MonoBehaviour
    {
        // Any asset type
        public AssetReference reference;
    
        // Prefab assets
        public AssetReferenceGameObject gameObjectReference;
    
        // Sprite asset types
        public AssetReferenceSprite spriteReference;
        public AssetReferenceAtlasedSprite atlasSpriteReference;
    
        // Texture asset types
        public AssetReferenceTexture textureReference;
        public AssetReferenceTexture2D texture2DReference;
        public AssetReferenceTexture3D texture3DReference;
    
        // Any asset type with the specified labels
        [AssetReferenceUILabelRestriction("animals", "characters")]
        public AssetReference labelRestrictedReference;
    
        // Generic asset type (Unity 2020.3+)
        public AssetReferenceT<AudioClip> typedReference;
    
        // Custom asset reference class
        public AssetReferenceMaterial materialReference;
    
        [Serializable]
        public class AssetReferenceMaterial : AssetReferenceT<Material>
        {
            public AssetReferenceMaterial(string guid) : base(guid)
            {
            }
        }
    
        private void Start()
        {
            // Load assets...
        }
    
        private void OnDestroy()
        {
            // Release assets...
        }
    }
    
    
    Note

    2020.1 より前の Unity では、デフォルトで Inspector ウィンドウにジェネリックフィールドを表示できませんでした。以前のバージョンの Unity では、代わりに AssetReferenceT の非ジェネリックサブクラスを独自に作成する必要があります。[具体的なサブクラスの作成] を参照してください。

    AssetReferences のロードと解放

    AssetReference クラスには、参照されたアセットのロード、インスタンス化、解放を行う独自のメソッドが用意されています。また、AssetReference インスタンスを、アセットをロードするいずれかの Addressables クラスメソッドへのキーとして使用することもできます。

    以下の例は、AssetReference を現在のゲームオブジェクトの子としてインスタンス化し、親が破棄されるときに解放します。

    
    using UnityEngine;
    using UnityEngine.AddressableAssets;
    
    internal class InstantiateReference : MonoBehaviour
    {
        [SerializeField]
        private AssetReferenceGameObject reference;
    
        void Start()
        {
            if (reference != null)
                reference.InstantiateAsync(this.transform);
        }
    
        private void OnDestroy()
        {
            if (reference != null && reference.IsValid())
                reference.ReleaseAsset();
        }
    }
    
    

    AssetReference を使用したアセットのロードの詳細と例については、[AssetReference のロード] を参照してください。

    AssetReference への割り当てを特定ラベルを持つアセットに制限

    AssetReference フィールドに割り当てることができるアセットを、特定のラベルを持つアセットに制限するには、AssetReferenceUILabelRestriction 属性を使用します。AssetReference のサブクラスに加えてこの属性参照を使用すると、タイプとラベルの両方によって割り当てを制限できます。

    以下の例では、"animals" と "characters" ラベルのどちらも持たない参照に Addressable アセットを割り当てることができなくなります。

    
    [AssetReferenceUILabelRestriction("animals", "characters")]
    public AssetReference labelRestrictedReference;
    
    
    Note
    • この属性で禁止されるのは、Unity エディターでインスペクターを使用して特定のラベルのないアセットを割り当てる操作だけです。スクリプトを使用すると、指定したラベルのないアセットでもフィールドに割り当てることができます。
    • Addressable でないアセットを AssetReferenceUILabelRestriction 属性を持つフィールドにドラッグすることはできません。

    具体的なサブクラスの作成

    ジェネリック形式の AssetReference クラスを直接使用できない場合 (Unity が 202.1 より前のバージョンである場合、または CustomPropertyDrawer 属性を使用している場合) は、具体的なサブクラスを作成できます。

    具体的なサブクラスを作成するには、AssetReferenceT クラスから継承し、アセットタイプを指定します。さらに、GUID 文字列を基本クラスのコンストラクターに渡すことも必要です。

    
    [Serializable]
    internal class AssetReferenceMaterial : AssetReferenceT<Material>
    {
        public AssetReferenceMaterial(string guid) : base(guid)
        {
        }
    }
    
    

    作成したカスタム AssetReference サブクラスは、別のスクリプトで、他の AssetReference 型と同様に使用できます。

    
    // Custom asset reference class
    public AssetReferenceMaterial materialReference;
    
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)