티스토리 뷰
이번 작업은 트러블 슈팅으로부터 시작된다.
본 프로그램은 기존에도 GameObject를 기반으로 작동하는 오브젝트 풀을 이용해서 최적화를 구성하고 있었다.
실제로 어느 시점 까지는 이 구성으로도 최적화 상으로 큰 문제는 없었다.
하지만, ActionSystem을 재작업 하자 문제가 발생했다. 재작업 하기 전에 비해서 매우 적은 양의 공격 오브젝트에도 프레임 드랍이 발생했던 것.
특히, 실 게임에도 문제가 발생할 수 있겠다 싶을 정도로 느려지기에, 이에 대응해서 NewActionSystem을 구상하는 계기가 되었다.
물론, 문제점은 여럿 있었다. 다수의 공격 오브젝트들이 클래스를 여럿 들고 있어서 발생하는 것도 있었고, 내부 코드 상의 하자도 있었다. 하지만, 본인이 주목했던 또 다른 요소는 'GetComponent'였다.
GameObject 기반으로 오브젝트 풀이 구성되다 보니, 오브젝트 풀에서 오브젝트를 받아올 때 마다 연산 부하가 큰 GetComponent를 해야되는 구조가 되는 것이 최적화에 좋지 못하다고 판단했던 것이었다.
그렇기 때문에 오브젝트 풀을 ObjectPoolContent라는 부모 클래스를 작성하고, 이 ObjectPoolContent를 기반으로 구성되도록 구성하였다.
이에 오브젝트 풀에서 오브젝트를 받아올 떄 제너릭을 이용해서 원하는 타입으로 받아올 수 있도록 구성하고, ObjectPoolContent 자체적으로 ObjectPool으로서 작동해야 하는 기능들을 모두 가지고 있도록 구성하여 자식 클래스에서는 본연의 동작만 구현하면 되도록 구성하였다.
이렇게 구성하고 나니, 눈에 보일 정도로 최적화가 좋아졌다.
물론, 같이 수정한 구조 상의 하자나 가비지 대량 발생의 비중도 상당했겠지만, 그래도 이 부분에서의 최적화도 한 몫했다고 보고 있다.
'스파르타 내일배움캠프 > 최종 프로젝트 리포트' 카테고리의 다른 글
최종 프로젝트 리포트 -6 [절차적 생성을 이용한 필드 무한 확장] (1) | 2025.01.09 |
---|---|
최종 프로젝트 리포트 - 5 [중간 발표] (0) | 2025.01.07 |
최종 프로젝트 리포트 - 3 [인벤토리 시스템] (1) | 2024.12.29 |
최종 프로젝트 리포트 - 2 [액션 시스템] (0) | 2024.12.23 |
최종 프로젝트 리포트 - 1 [몬스터 기본 시스템] (1) | 2024.12.08 |