스타트씬의 배경을 제작했다! 디자인은 정말 어려운 영역이다.
프로젝트를 진행하다보면 리소스에 대해 많은 얘기가 오간다.
이와 더불어 메모리관리에 대해서도 많은 의견을 주고 받는데,
과연 프리팹이 100개인 경우 어느정도로
이 기능을 사용하면 게임의 다양한 에셋을 분류하여 번들로 묶을 수 있다.
이렇게 하면 필요할 때만 특정 에셋을 로드하거나 업데이트 할 수 있어 메모리 사용량을 최적화하고 로딩 시간을 줄일 수 있다.
Resources 폴더 내에 있는 에셋은 언제든지 Resources.Load()를 통해 동적으로 로드할 수 있다.
하지만 이 폴더를 너무 많이 사용하면 빌드 사이즈가 커지고, 시작 로딩 시간이 길어질 수 있으므로 주의해야 한다.
어드레서블 시스템은 에셋 번들의 확장된 개념으로, 에셋을 좀 더 유연하게 관리할 수 있게 해준다.
에셋에 주소를 할당하고, 이 주소를 통해 로드하거나 언로드하는 방식으로 동작한다.
이 방식을 통해 메모리 관리, 네트워크로부터의 에셋 로딩 등이 용이해진다.
오브젝트를 반복해서 생성하고 파괴하는 것은 성능에 부담을 줄 수 있다.
오브젝트 풀을 사용하면 미리 오브젝트를 생성해 두고 필요할 때 재사용함으로써 성능을 향상시킬 수 있다.
SceneManager.LoadSceneAsync() 또는 AssetBundle.LoadAssetAsync()와 같은 비동기 메서드를 사용하여 게임의 흐름을 방해하지 않으면서 에셋을 로드할 수 있다.
유니티 프로파일러나 외부 도구를 사용하여 게임의 메모리 사용 상황을 모니터링하고, 불필요한 메모리 사용을 줄일 수 있다.
프리팹에 포함된 메쉬의 복잡성, 텍스처의 해상도, 스크립트의 복잡성 등 프리팹 자체의 성능 요구 사항이 중요하다.
고품질의 그래픽과 많은 수의 스크립트가 있을수록, 그리고 이들이 매 프레임마다 많은 계산을 요구할수록 성능에 더 큰 영향을 미친다.
한 번에 화면에 표시되는 프리팹의 수가 많으면 많을수록, 렌더링에 더 많은 부하가 걸린다.
즉, 동시에 많은 프리팹이 활성화되어 있으면 GPU와 CPU에 부담을 줄 수 있다.
유니티에서 프리팹의 인스턴스를 생성하는 과정은 비용이 든다.
특히 많은 수의 프리팹을 동시에 인스턴스화하면 초기 로딩 시간에 영향을 줄 수 있다.
또한, 생성된 각 인스턴스에 대한 참조를 적절히 관리하지 않으면 메모리 누수가 발생할 수 있다.
게임에서 프리팹 인스턴스를 반복적으로 생성하고 파괴하는 경우, 오브젝트 풀링을 사용하지 않으면 가비지 컬렉션에 의한 성능 저하를 경험할 수 있다.
오브젝트 풀링을 적용하면 이러한 비용을 상당히 줄일 수 있다.
모든 프리팹이 게임 내에서 동일하게 사용되지는 않다.
일부는 지속적으로 활성화되고 비활성화되는 반면, 다른 일부는 거의 사용되지 않을 수 있다.
또한, 프리팹이 사용자의 시야에서 멀리 떨어진 위치에 있을 경우 성능에 미치는 영향은 적을 수 있다.
게임을 제작하다보면 다양한 기능을 사용하게 된다.
그러나 기능을 클론하기 급급하고 정작 그 기능에 대해 명확하게 사용 용도를 생각하지 않는다.
기능을 사용하기 전,
위 세 개만 고려해도 기능에 대해 완벽하게 이해하게 될 것 같다.