private void OnDestroy()
 {
     if (reference != null && reference.IsValid())
     {
         reference.ReleaseAsset();
     }
 }
Beispiel #2
0
        private void Method()
        {
            // * Valid 검사를 수행하지 않으면
            // 이미 로드되었는데도 중복 로드될 수 있다.

            // 1-1. 애셋 레퍼런스로부터 메모리에 로드 및 핸들 참조
            if (!redCubeReference.IsValid())
            {
                redCubeHandle = redCubeReference.LoadAssetAsync();
            }

            // 1-2. 메모리에 로드 + 성공 시 수행할 동작 지정
            if (!redCubeReference.IsValid())
            {
                redCubeReference.LoadAssetAsync().Completed +=
                    (AsyncOperationHandle <GameObject> handle) =>
                {
                    // 핸들 참조 등록
                    redCubeHandle = handle;

                    // 로드 완료 시 수행할 동작들
                    redCubePrefab = handle.Result;
                };
            }


            // 2. 메모리에 적재된 애셋을 실제로 사용
            Instantiate(redCubePrefab);


            // 3-1. 애셋 레퍼런스를 기반으로 메모리에서 해제
            if (redCubeReference.IsValid())
            {
                redCubeReference.ReleaseAsset();
            }

            // 3-2. 핸들을 기반으로 메모리에서 해제
            if (redCubeHandle.IsValid())
            {
                Addressables.Release(redCubeHandle);
                redCubePrefab = null;
            }
        }