🐧 들어가기 앞서

스타트씬의 배경을 제작했다! 디자인은 정말 어려운 영역이다.


🐧 오늘 배운 것

프로젝트를 진행하다보면 리소스에 대해 많은 얘기가 오간다.

이와 더불어 메모리관리에 대해서도 많은 의견을 주고 받는데,

과연 프리팹이 100개인 경우 어느정도로


🐧 기억할 것 & 진행

⚙️ 리소스 관리 방법

💡에셋 번들 (Asset Bundles)

이 기능을 사용하면 게임의 다양한 에셋을 분류하여 번들로 묶을 수 있다.
이렇게 하면 필요할 때만 특정 에셋을 로드하거나 업데이트 할 수 있어 메모리 사용량을 최적화하고 로딩 시간을 줄일 수 있다.

💡리소스 폴더 (Resources Folder)

Resources 폴더 내에 있는 에셋은 언제든지 Resources.Load()를 통해 동적으로 로드할 수 있다.
하지만 이 폴더를 너무 많이 사용하면 빌드 사이즈가 커지고, 시작 로딩 시간이 길어질 수 있으므로 주의해야 한다.

💡어드레서블 에셋 (Addressable Assets):

어드레서블 시스템은 에셋 번들의 확장된 개념으로, 에셋을 좀 더 유연하게 관리할 수 있게 해준다.

에셋에 주소를 할당하고, 이 주소를 통해 로드하거나 언로드하는 방식으로 동작한다.

이 방식을 통해 메모리 관리, 네트워크로부터의 에셋 로딩 등이 용이해진다.

💡오브젝트 풀 (Object Pooling)

오브젝트를 반복해서 생성하고 파괴하는 것은 성능에 부담을 줄 수 있다.

오브젝트 풀을 사용하면 미리 오브젝트를 생성해 두고 필요할 때 재사용함으로써 성능을 향상시킬 수 있다.

💡비동기 로딩 (Asynchronous Loading)

SceneManager.LoadSceneAsync() 또는 AssetBundle.LoadAssetAsync()와 같은 비동기 메서드를 사용하여 게임의 흐름을 방해하지 않으면서 에셋을 로드할 수 있다.

💡메모리 프로파일링 (Memory Profiling)

유니티 프로파일러나 외부 도구를 사용하여 게임의 메모리 사용 상황을 모니터링하고, 불필요한 메모리 사용을 줄일 수 있다.

⚙️ 프리팹 사용 고려 사항

✅프리팹의 복잡도

프리팹에 포함된 메쉬의 복잡성, 텍스처의 해상도, 스크립트의 복잡성 등 프리팹 자체의 성능 요구 사항이 중요하다.

고품질의 그래픽과 많은 수의 스크립트가 있을수록, 그리고 이들이 매 프레임마다 많은 계산을 요구할수록 성능에 더 큰 영향을 미친다.

✅동시 활성화

한 번에 화면에 표시되는 프리팹의 수가 많으면 많을수록, 렌더링에 더 많은 부하가 걸린다.

즉, 동시에 많은 프리팹이 활성화되어 있으면 GPU와 CPU에 부담을 줄 수 있다.

✅인스턴스화와 관리

유니티에서 프리팹의 인스턴스를 생성하는 과정은 비용이 든다.

특히 많은 수의 프리팹을 동시에 인스턴스화하면 초기 로딩 시간에 영향을 줄 수 있다.

또한, 생성된 각 인스턴스에 대한 참조를 적절히 관리하지 않으면 메모리 누수가 발생할 수 있다.

✅오브젝트 풀링(Object Pooling)

게임에서 프리팹 인스턴스를 반복적으로 생성하고 파괴하는 경우, 오브젝트 풀링을 사용하지 않으면 가비지 컬렉션에 의한 성능 저하를 경험할 수 있다.

오브젝트 풀링을 적용하면 이러한 비용을 상당히 줄일 수 있다.

✅프리팹의 사용 빈도와 위치

모든 프리팹이 게임 내에서 동일하게 사용되지는 않다.

일부는 지속적으로 활성화되고 비활성화되는 반면, 다른 일부는 거의 사용되지 않을 수 있다.

또한, 프리팹이 사용자의 시야에서 멀리 떨어진 위치에 있을 경우 성능에 미치는 영향은 적을 수 있다.


📢 기능을 왜 사용할까?

게임을 제작하다보면 다양한 기능을 사용하게 된다.

그러나 기능을 클론하기 급급하고 정작 그 기능에 대해 명확하게 사용 용도를 생각하지 않는다.

기능을 사용하기 전,

  1. 내가 왜 이 기능을 사용하는지?
  2. 이 기능을 사용했을 때 프로젝트에 얻는 이점이 무엇인지?
  3. 차선책이 있다면 비교점은 무엇인지?

위 세 개만 고려해도 기능에 대해 완벽하게 이해하게 될 것 같다.


0개의 댓글