728x90
언리얼 시작.. 내일부터는 언리얼을 정리 해보도록 하겠다 크악..
Unity
- Unity Addressables는 Unity에서 리소스(assets)를 더 효율적으로 관리하고 로드하기 위한 강력한 시스템이다. Addressables을 사용하면 동적 콘텐츠 관리, 메모리 최적화, 게임의 로딩 시간 감소와 같은 기능을 쉽게 구현할 수 있다.
1. Addressables이란?
- Unity Addressables 시스템은 게임 리소스(텍스처, 사운드, 모델, 애니메이션 등)를 어드레서블(Addressable)하게 만드는 기능을 제공한다.
- 리소스에 주소를 부여하고, 이 주소를 사용하여 해당 리소스를 필요할 때 로드하거나 언로드할 수 있다. 이 방식은 리소스를 다루는 전통적인 Unity의 Resources 폴더 및 Asset Bundles의 한계를 극복하기 위해 설계되었다.
2. Addressables의 주요 개념
- Addressable Asset
- 어드레서블 에셋은 Addressables 시스템을 통해 주소로 관리되는 리소스다. 에셋을 Addressable로 만들면 Unity가 자동으로 이를 관리하며, 메모리에서 로드하거나 해제하는 작업을 유연하게 처리할 수 있다.
- Address
- 각 에셋은 고유한 주소를 가진다. 이 주소는 문자열로, 코드에서 해당 주소를 참조해 에셋을 로드하거나 해제할 수 있다. 에셋의 이름, 파일 경로, 또는 사용자가 지정한 별칭이 주소로 사용될 수 있다.
- Asset Groups
- Addressables 시스템에서 여러 에셋을 그룹으로 묶을 수 있다. Asset Group은 Addressables 에셋을 빌드하고 배포할 때 중요한 역할을 하며, 각 그룹은 게임 배포 시 애셋 번들로 패키징된다. 이러한 그룹은 특정 플랫폼에 맞는 설정을 가지거나, 동적으로 로드될 리소스의 묶음으로 관리된다.
- Remote Content
- Addressables는 원격 서버에서 리소스를 가져올 수 있다. 이를 통해 앱의 용량을 줄이면서 네트워크를 통해 필요한 리소스를 동적으로 로드하는 방식이 가능하다. 예를 들어, 게임 업데이트 없이 새로운 콘텐츠를 배포할 수 있다.
3. Addressables 사용의 주요 이점
- 메모리 관리
- Addressables 시스템을 사용하면, 필요할 때만 리소스를 로드하고 사용이 끝나면 메모리에서 해제할 수 있다. 이를 통해 불필요하게 메모리를 차지하는 리소스를 줄일 수 있어, 메모리 관리가 더 쉬워진다.
- 더 나은 빌드 관리
- Addressables는 리소스들을 빌드의 각 부분으로 나눌 수 있는 기능을 제공한다. 이를 통해 개발자는 리소스를 언제, 어디서 로드할지 선택할 수 있다. 또한, 빌드를 다시 하지 않고도 원격 서버에서 새로운 리소스를 제공할 수 있다.
- 빠른 로딩 시간
- 게임 시작 시 모든 리소스를 한꺼번에 로드하는 대신, Addressables 시스템을 사용하면 필요한 시점에만 리소스를 로드할 수 있다. 이는 로딩 시간을 줄이는 데 도움이 된다.
- 멀티 플랫폼 지원
- Addressables는 멀티플랫폼 게임 개발에 매우 유리하다. Unity의 다른 빌드 플랫폼들과도 잘 호환되며, 각 플랫폼에 맞춘 최적화를 할 수 있다.
Addressables 시스템의 주요 기능
- 동적 로드 및 언로드
- Addressables는 게임 내 특정 시점에서 필요한 리소스만 메모리에 로드할 수 있다. 게임의 특정 씬이나 레벨이 로드될 때 필요한 리소스만 가져오고, 사용이 끝나면 메모리에서 언로드하여 메모리 사용량을 최소화할 수 있다.
- using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class AddressablesExample : MonoBehaviour { void Start() { // "myAssetAddress" 주소를 통해 에셋을 로드한다. Addressables.LoadAssetAsync<GameObject>("myAssetAddress").Completed += OnAssetLoaded; } void OnAssetLoaded(AsyncOperationHandle<GameObject> obj) { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject loadedAsset = obj.Result; Instantiate(loadedAsset); } } }
- 원격 리소스 관리
- Addressables 시스템은 CDN(콘텐츠 배포 네트워크)이나 클라우드 서버를 통해 원격에서 리소스를 로드할 수 있다. 이를 통해 게임 업데이트 없이 새로운 콘텐츠를 동적으로 제공할 수 있으며, 초기 게임 설치 파일 크기를 줄일 수 있다.
- 프로파일 기반 설정
- Addressables은 프로파일 시스템을 제공하여, 개발 중인 환경과 실제 배포 환경에 따라 리소스를 다르게 관리할 수 있다. 예를 들어, 로컬 테스트에서는 로컬 파일을 사용하고, 실제 빌드에서는 원격 서버에서 리소스를 가져오는 방식으로 설정할 수 있다.
- 애셋 번들 관리
- Addressables 시스템은 기존 애셋 번들을 더 쉽게 관리하고 로드할 수 있게 해준다. 빌드 시 에셋 번들로 변환되며, 이 번들을 주소를 통해 로드하거나 관리할 수 있다.
5. Addressables 사용 시 고려사항
- 초기 세팅
- Addressables을 처음 사용하는 경우, Unity 프로젝트 내 리소스에 주소를 부여하는 설정을 해야 한다. 이를 위해 Addressables Groups 창에서 리소스를 Addressable로 지정할 수 있다.
- 원격 콘텐츠 업데이트
- 원격 서버에서 리소스를 로드할 때는 네트워크 상황을 고려해야 한다. 느린 네트워크 환경에서는 리소스 로딩 시간이 길어질 수 있으며, 네트워크가 끊길 가능성도 고려해야 한다.
- 빌드 관리
- Addressables은 리소스가 어떻게 빌드되고 배포되는지를 명확히 관리해야 한다. 리소스를 동적으로 관리하는 시스템이므로, 게임의 흐름에 따라 올바른 리소스를 적절한 시점에 로드하도록 설정하는 것이 중요하다.
CS
인터럽트(Interrupt)
- 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것이다.
- 지금 수행 중인 일보다 더 중요한 일이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속한다.
- 외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해서 발생한다.
- 소프트웨어 인터럽트는 명령어의 수행에 의해 발생한다.
외부 인터럽트
- 입출력 장치, 타이밍, 장치, 전원 등 외부적인 요인으로 발생한다.
- 전원 이상, 기계 착오, 외부 신호, 입출력
내부 인터럽트
- Trap이라고도 부르며, 잘못된 명령이나 데이터를 사용할 때 발생한다.
소프트웨어 인터럽트
- 프로그램 처리 중 명령의 요청에 의해 발생한 것(SVC 인터럽트)
과정
- 주 프로그램 실행
- 인터럽트 발생
- 복귀 주소 저장
- 인터럽트 벡터로 점프
- 인터럽트 처리
- 인터럽트 처리완료
- 복귀주소 로드
- 마지막에 실행되던 주소로 점프
- 주 프로그램 실행
캐시 메모리(Cache Memory)
- 속도와 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 뜻한다.
- CPU가 주기억장치에서 저장된 데이터를 읽어올 때, 자주 사용한는 데이터를 캐시 메모리에 저장한 뒤, 다음에 이용할 때 주기억장치가 아닌 캐시 메모리에서 먼저 가져오면서 속도를 향상시킨다.
- 속도라는 장점을 얻지만, 용량이 적기도 하고 비용이 비싼 점이 있다.
캐시 메모리 작동 원리
- 시간 지역성
- for나 while 같은 반복문에 사용하는 조건 변수처럼 한번 참조된 데이터는 잠시 후 또 참조될 가능성이 높다.
- 공간 지역성
- A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처에 있는 데이터가 잠시후 또 사용될 가능성이 높다.
캐시 미스 경우 3가지
- Cold miss
- 해당 메모리 주소를 처음 불러서 발생하는 미스
- Conflict miss
- 캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스(Direct mapped cache에서 많이 발생한다)
- Capacity miss
- 캐시 메모리의 공간이 부족해서 나는 미스(Conflict : 주소 할당 문제, Capacity : 공간 문제)
- 캐시 크기를 키워서 문제를 해결하려하면, 캐시 접근속도가 느려지고 파워를 많이 먹는 단점이 생긴다.
구조 및 작동 방식
- Direct Mapped Cache
- 가장 기본적인 구조로, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식이다.
- 캐시 메모리는 인덱스 필드 + 태그 필드 + 데이터 필드 로 구성된다.
- 간단하고 빠른 장점이 있지만, Conflict Miss가 발생한다는 것이 단점이다.
- Fully Associative Cache
- 비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식이다.
- 저장할 때는 매우 간단하지만, 찾을 때 문제가 생긴다.
- 조건이나 규칙이 없어서 특정 캐시 Set 안에 있는 모든 블럭을 한번에 찾아 원하는 데이터가 있는지 검색해야 한다. CAM이라는 특수한 메모리 구조를 사용해야 하지만 가격이 매우 비싸다.
- Set Associative Cache
- Direct + Fully 방식이다. 특정 행을 지정하고, 그 행안의 어떤 열이든 비어있을 대 저장하는 방식이다.
- Direct에 비해 검색 속도는 느리지만, 저장이 빠르고 Fully에 비해 저장이 느린 대신 검색이 빠른 중간형이다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.09.30 UE5 (1) | 2024.09.30 |
---|---|
24.09.26 UE5, CS (0) | 2024.09.26 |
24.09.24 C++, 책 (1) | 2024.09.24 |
24.09.23 C++, CS (0) | 2024.09.23 |
24.09.20 C++, CS (0) | 2024.09.20 |