[개발일지 #01] Dancing Jump - 오브젝트 풀링 | Stack, Pop, Push

코드멍멍이(Joonieboy)·2022년 8월 12일
2
post-thumbnail

🔶 Dancing Jump


댄싱점프는 소소하게 할 수 있는 "원터치 게임"을 만들고 싶어서 갑자기 시작한 프로젝트예요~ 제가 하는 게임들도 고차원적인 게임들이 아니라 캐주얼하게 할 수 있는 게임들을 좋아하거든요. 지하철이나 버스를 타고 가면서, 아니면 대중교통을 기다리면서 시간을 때우기 좋다는 점도 한 몫 하지요.

개발일지를 작성하게 된 이유도 별거 없어요. 제가 잘 하고 있는지 꾸준히 업로드 하면서, 끝까지 잘 끝내고자 하는 거창하지 않은 이유! 거창한 것들 보다는 소소하고 확실한 느낌이 좋아서, 이번 프로젝트도 무사히 잘 마치기를 바라는 중이랍니다.

🔶 Object Pool


저는 오브젝트 풀링을 List를 사용해서 만들고는 했는데, Pop과 Push를 사용하는 방법도 있어서 이번에는 이 방식을 사용하고자 해요. 현재 "Dancing Jump"에 점프대로 나오는 자동차들이 Intanciate로 생성되고, Destroy로 지우는 형태이기 때문에 쓰레기 메모리들이 많이 생성이 돼요.

그래서 이 쓰레기들을 정리하기 위해서 GC인 가비지 콜렉터가 실행이 된답니다. GC가 실행이 되면, 순간 렉이 걸리는 현상 때문에 유저의 게임 환경이 좋지 못하다는거... 사실 메모리가 별로 사용되지 않는 게임이기 때문에 굳이 오브젝트 풀링을 하지 않아도 될 것 같지만, 그래도 최적화를 위해서 하면 좋잖아요?

🔶 오브젝트 풀링 제작 #1


싱글톤으로 오브젝트 풀링을 관리할 거예요. 그래서 현재 스크립트를 싱글톤으로 만들었어요. 그리고 오브젝트 풀링을 구현하기 위해서 Stack을 사용할거예요. 그래서 Stack을 Gameobject로 초기화 해주었어요.

그 다음 Start()에서 제가 오브젝트 풀링을 사용할 게임 오브젝트를 Instaciate를 사용하여 넉넉히 만들어주었어요. 그 다음 Stack.Push()를 사용하여 복제한 게임 오브젝트들을 Stack에 담아주었죠.

스택 예시

🔶 오브젝트 풀링 제작 #2


읽기 힘드실까봐, 한 번 끊었다가 가도록 해요~ 위처럼 Stack.Push()로 스택을 쌓으셨다면, 이제 Stack.Pop()을 사용하여 사용할 시간이예요. 제가 원하는 부분에 Stack.Pop()을 사용해서 참고하고, GameObject.SetActive(true)로 차들을 생성해주었어요. 그러면, 매번 Instanciate로 생성하지 않아도 된답니다. 즉, 오브젝트는 꺼졌다 켜졌다 하면서, 생성되는 것 처럼 보여지는 거예요.

움짤은 아니지만, 오브젝트가 꺼졌다 켜졌다 하는 것 보이시나요?

이제 원래 차가 Destroy 되던 곳에 Stack.Push를 하여, 제거를 하는 대신에 스택에 쌓도록 할 거예요. 그러면 위의 사진처럼 복제된 차들이 꺼졌다 켜졌다 혹은 이동하는 등의 행동을 하게 되겠죠?

🔶 느낀점

오브젝트 풀링을 Stack으로 구현하면서, 생각보다 즐거움을 느꼈어요. 당장에 필요한 것은 최적화가 아니라, 게임성일수도 있겠지만 이렇게 코드 리팩토링을 통해서 게임이 한 층 부드러워진 것을 체험할 수 있었지요. 여러분들의 게임 또한, GC 때문에 느려진다면? 오브젝트 풀링이 필요한 곳이 있는지 확인하시고, 구현해보시기를 추천드려요!!

profile
#유니티개발자 #게임 #인플루언서 #ENFJ

0개의 댓글