목차
프레임워크 몹 프로그래밍, 최적화 학습
오늘 오후부터 프레임워크를 다 같이 짜는 시간을 가질 예정이다.
나는 필요한 부분을 학습했고, 이해도 충분히 되었다고 판단되어 다른 부분을 학습했다.
오늘은 최적화를 한번 더 학습하고, 아마 어떤 파트를 맡을지는 모르겠지만 몬스터에 도입하게 될 BT에 대해서 예습을 할 예정이다.
최적화 (챌린지반 특강 복습)
제한된 자원을 효율적으로 활용하여 게임의 성능과 사용자 경험을 향상시키는 과정이다.
자원을 덜 사용하면서 동일한 성능을 내도록 효율을 극대화하는 전략적인 접근인 셈이다.
'어디서 문제가 발생하는지'를 정확히 진단하는 과정을 '프로파일링'이라고 한다.
유니티에서 Unity Profiler라는 도구를 통해 CPU, GPU, 메모리, 렌더링 등 다양한 성능 지표를 실시간으로 분석할 수 있다.
추측이 아닌 데이터 기반으로 병목 구간을 파악할 수 있는 것이다.
GC 최적화
C# 런타임은 더 이상 사용되지 않는 객체를 자동으로 정리하는 GC 시스템을 사용한다.
GC가 작동하는 순간에는 게임 로직이 일시적으로 멈추는 프레임 스파이크가 발생하여 화면이 끊기는 현상을 유발할 수 있다.
GC 최적화의 핵심은 불필요한 메모리 할당을 줄이는 것이다.
string의 반복 연산, LINQ, foreach 루프, Instantiate/Destory 같은 코드는 매번 새로운 객체를 생성하므로 GC를 유발하기 쉽다.
해결을 위해서는
- 문자열: StringBuilder를 사용하여, 문자열을 재사용한다.
- 객체: 자주 생성하고 파괴되는 객체는 오프젝트 풀링을 통해 미리 만들어 재사용한다.
- API: Physics.RaycastNonAlloc등 NonAlloc 접미사가 붙은 할당 없는 함수를 사용한다.
드로우콜(Draw Call) 최적화
CPU가 GPU에게 무언가를 그려라고 명령하는 요청이다.
새로운 머터리얼, 쉐이더, 또는 텍스쳐가 사용될 때마다 새로운 드로우 콜이 발생한다.
드로우 콜 수가 많아지면 CPU와 GPU 모두에 부하가 걸려 프레임 저하의 원인이 된다.
해결을 위해서는
- 배칭(Batching): 동일한 설정을 가진 여러 오브젝트를 하나로 묶어 드로우 콜을 줄인다.
- 정적 배칭: 움직이지 않는 오브젝트를 미리 결합한다.
- 동적 배칭: 작은 오브젝트들을 자동으로 묶는다.
- GPU 인스턴싱: 같은 메시를 가진 오브젝트를 효율적으로 그린다. (나무, 풀 등)
- 아틀라스(Atlas): 여러 이미지를 하나릐 큰 텍스처로 합쳐서 하나의 머터리얼로 많은 오브젝트를 그릴 수 있게 한다. 특히 UI 최적화에 효과적.
Frame Debugger를 활용하면 어떤 오브젝트가 왜 배칭되지 않았는지 원인을 직접 확인할 수도 있다.
실전 최적화 활용 방법
- 프로파일링: FPS 하락 구간을 포착하고 CPU와 GPU 중 어느 쪽이 문제인지 먼저 확인한다.
- 원인 파악
- CPU 문제: 메모리(GC), 로직, 물리 연산 등 코드가 문제일 가능성이 높다.
- GPU 문제: 렌더링, 쉐이더, 드로우 콜 수가 문제일 가능성이 높다.
- 최적화 적용: 확인된 병목 구간에 맞춰 GC 최적화, 드로우 콜 최적화, 혹은 연산 최적화 등을 적용한다. 모든 부분을 최적화하기보다는 가장 큰 문제부터 해결하는 것이 효율적이다.
최적화는 개발의 마지막 단계가 아니라 설계 단계부터 고려해야하는 중요한 과정이다.
페어 프로그래밍
오늘 개발자 다섯이 모여서 주요 프레임워크를 다 같이 페어프로그래밍했다.
사실 2명이서 함께 프로그래밍하는 경우는 페어프로그래밍이라고하고 여러명이서 함께 프로그래밍하는건 몹 프로그래밍이라고 한다.
다들 고생많으셨지만 4명의 네비게이터들의 압박 속에서 작성해주신 드라이버 역할을 담당하셨던 분들의 노고가 아주 대단하셨을것 같다.
사실 페어 프로그래밍은 개발 방법 중 피로도가 매우 상당한 편이다.
하지만 같은 강의를 보고난 뒤 다 같이 머리를 맞대고 짜다보니 강의와 비슷하면서도 각자의 취향이 조금씩 더해져서 팀에 적합한 프레임워크가 구현되었다고 생각한다.
느낀점
튜터님이 중간에 오셔서 여러가지 체크를 하고 가셨다.
튜터님이 지난 기수들 담당하셨던 팀들이 우수 프로젝트 선발이 되었다고... 알려주셨다.
팀원 중에는 우수팀 선발을 휩쓴 분도 계시고.. 우리팀 기운이 좋다!
압박감이 상당해졌지만! 이런 요인들이 있어야 결과물에 욕심을 내는 성향이라 오히려 좋아?!
모의면접에 관해서도 알려주셨다.
총 4번의 모의면접을 보게 될텐데, 그 중 초반 회차에서는 알려주신 범위 내에서 질의응답을 하게된다.
하지만 후반 회차에서는 목록에 없는 질문이 들어올 수도 있고, 1:1 모의면접이 아니라 5:1로 팀원들과 함께 단체 면접을 보기도 할거라고 하셨다.
1:1도 괜찮고, 그냥 5:1도 떨리지만 괜찮을 것 같은데 팀원들과 5:1 면접? 절망이다. 하지만 현실 면접은 더욱 잔인할테니 견뎌야지 어쩌겠어.
내일 학습 할 것은 무엇인지
몬스터를 담당하게 되었다!
우리는 액션 위주기 때문에 일단 1차 프로토타입에는 플레이어와 몬스터 두 분류로 2명씩 나뉘어 작업하고, 유틸리티(기획테이블, 어드레서블 등)는 팀의 에이스가 담당하게 될 것 같다.
따라서 내일 오전 스크럼때 개발팀장님이 보다 자세한 일정을 주시겠지만!
몬스터를 담당한 팀원분과 나는 몬스터에 적용하게 될 BT에 대해서 공부를 각자 해본 뒤, 오후부터 같이 구조를 짜지 않을까 싶다.
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025SEP12] DataHandler, 상속 설계의 중요성 (0) | 2025.09.12 |
|---|---|
| [내일배움캠프_2025SEP11] Behavior Tree (0) | 2025.09.11 |
| [내일배움캠프_2025SEP09] Cry4Code 팀 결성! (0) | 2025.09.09 |
| [내일배움캠프_2025SEP04] Cooking Knight 발표 & 최종 팀 빌드 (0) | 2025.09.08 |
| [내일배움캠프_2025SEP04] Cooking Knight 4일차 (0) | 2025.09.04 |