에셋 레퍼런스 필드 생성
AssetReference
또는 서브 클래스 중 하나를 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...
}
}
[!참고] Unity 2020.1 이전 버전의 경우 인스펙터 창에 기본적으로 일반 필드가 표시되지 않았습니다. 이전 버전의 Unity에서는
AssetReferenceT
의 일반이 아닌 자체 서브 클래스를 만들어야 합니다. 자세한 내용은 구체적인 서브 클래스 생성을 참조하십시오.
에셋 레퍼런스 로드 및 해제
AssetReference
클래스는 참조된 에셋을 로드, 인스턴스화 및 해제할 수 있는 방법을 제공합니다. 또한 에셋을 로드하는 Addressables
클래스 메서드의 키로 AssetReference 인스턴스를 사용할 수도 있습니다.
다음 예시에서는 현재 게임 오브젝트의 자식으로 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 로드를 참조하십시오.
레이블과 에셋 레퍼런스 사용
AssetReferenceUILabelRestriction
속성을 사용하면 AssetReference
필드에 할당할 수 있는 에셋을 특정 레이블이 있는 에셋으로 제한할 수 있습니다. 이 속성 레퍼런스와 AssetReference
서브 클래스를 사용하여 유형과 레이블을 기준으로 할당을 제한할 수 있습니다.
다음 예시에서는 animals
라는 레이블이나 characters
라는 레이블이 없는 레퍼런스에 어드레서블 에셋을 할당하지 못하게 합니다.
[AssetReferenceUILabelRestriction("animals", "characters")]
public AssetReference labelRestrictedReference;
이 속성은 Unity 에디터에서 인스펙터를 사용하여 특정 레이블 없이 에셋을 할당하는 것을 방지하기만 합니다. 스크립트를 사용하여 레이블이 없는 에셋을 필드에 할당할 수는 있습니다.
AssetReferenceUILabelRestriction
속성이 있는 필드에는 비 어드레서블 에셋을 드래그할 수 없습니다.
구체적인 서브 클래스 생성
Unity 2020.1 이전 버전이나 CustomPropertyDrawer
속성을 사용하는 등 일반적인 형태의 AssetReference
클래스를 직접 사용할 수 없는 경우 구체적인 서브 클래스를 생성할 수 있습니다.
구체적인 서브 클래스를 생성하려면 AssetReferenceT
클래스를 상속하고 에셋 유형을 지정합니다. 또한 기본 클래스 생성자에 GUID 문자열을 전달해야 합니다.
[Serializable]
internal class AssetReferenceMaterial : AssetReferenceT<Material>
{
public AssetReferenceMaterial(string guid) : base(guid)
{
}
}
다른 스크립트에서 커스텀 AssetReference 서브 클래스를 다른 AssetReference 유형과 동일한 방식으로 사용할 수 있습니다.
// Custom asset reference class
public AssetReferenceMaterial materialReference;