본문 바로가기
Unity

[Unity] Addressable 시스템 활용

by Kyoung2 2022. 8. 21.
반응형

유니티 개발을 진행할 때, 3D 오브젝트의 머티리얼을 런타임 중에 변경해야하는 상황이 생긴다. 

작은 조각들로 이루어진 오브젝트들을 자주 바꿔주거나 교체해야할일이 생긴다.

어드레서블 시스템을 활용하여 런타임중에 머티리얼을 변경하는 코드를 작성해 보았다.

 

Window → Package Manager → Packages:Unity Registry  → Addressbles 를 찾아 설치한다.

 

https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/index.html

 

Addressables | Addressables | 1.19.19

Addressables The Addressables system provides tools and scripts to organize and package content for your application and an API to load and release assets at runtime. When you make an asset "Addressable," you can use that asset's address to load it from an

docs.unity3d.com

어드레서블 시스템은 기존의 유니티 에셋번들 시스템을 업그레이드 시킨 것으로 애플리케이션의 콘텐츠를 구성하고 패키징하기 위한 도구와 스크립트와 런타임에 자산을 로드 및 릴리스하는 API를 제공합니다.

자산을 "주소 지정 가능"으로 만들면 해당 자산의 주소를 사용하여 어디에서나 로드할 수 있습니다. 

해당 자산이 로컬 애플리케이션에 있든 콘텐츠 전송 네트워크에 있든 상관없이 주소 지정 가능 시스템은 자산을 찾아 반환합니다.

 

설치 후 Window   Asset Management Addressables Groups

 

Group에서는 자산 목록을 빌드할 수 있으며, 자산의 Key값, Label 등 유니크한 참조 값을 가지고 있습니다.

 

어드레서블 그룹은 자산 목록과 빌드를 하기 위한 창이다.

자산그룹에 추가하려면 인스펙터 창 상단에 Addressable 을 체크하면 자산 목록에 추가된다.

 

 

AddressablePractice.cs  파일을 생성한다.

using UnityEngine.AddressableAssets;

public class AddressablePractice : Monobehaviour
{

    public class AssetReferenceMaterial : AssetReferenceT<Material>
    {
        public AssetReferenceMaterial(string guid) : base(guid) { }
    }
    public AssetReferenceMaterial[] _addressableMaterials; //어드레서블 머티리얼 배열 선언

    private void Start()
    {
        for (int i = 0; i < _addressableMaterials.Length; i++)
        {
            _addressableMaterials[i].LoadAssetAsync(); //어드레서블 머티리얼 배열 로드
        }
    }
    private void Update()
    {
            if(Input.GetKey(KeyCode.A)) //A Key를 누르면 특정 인덱스의 머티리얼로 변경
            {
                OnChangedMatMethod(gameobj, status); 
                // 머티리얼 변경 함수 호출
            }
    } 
    
   public void OnChangedMatMethod(GameObject gameobj, int status)
   {
        for (int i = 0; i < _addressableMaterials.Length; i++)
        {
              gameobj.GetComponent<MeshRenderer>().material = _addressableMaterials[index].Asset as Material;
                 /// 오브젝트의 메시렌더러 컴포넌트의 메테리얼 속성을 변경
        }
   }
   private void OnDisable()
   {
        for (int i = 0; i < _addressableMaterials.Length; i++)
        {
            _addressableMaterials[i].ReleaseAsset(); //어드레서블 머티리얼 배열 릴리즈
        }
   }
}

 

 

해당 화면처럼 변경할 머티리얼을 넣어준다.

 

머티리얼이 변경된 사진은 보안상 못보여준다.. 다시 업데이트 하겠습니다.

 

해당내용은 유니티 Gitbub 내용을 참고하여 작성하였습니다.

 

 

 
728x90
반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading