▶▷ 구조 설계
이번에 최종 프로젝트로 제작할 게임은 2D 횡스크롤 멀티 보스레이드 게임이다.
조작은 모두 키보드로 이루어진다.
이동: 방향키
점프: c
기본공격: x
회피: z
스킬: a, s, d
직업은 우선 탱커, 힐러, 궁수, 마법사, 마검사 등 5가지가 있고 추후에 추가될 예정이다. 각 직업은 3가지의 고유 스킬이 있으며 각각의 특성을 뚜렷하게 해서 골고루 파티를 꾸려야 게임이 수월하게 진행되도록 만들 예정이다.
전체적인 게임의 흐름을 나타낸 차트이다. 방에 들어간 다음 난이도를 선택하고 파티원을 모을 수 있다. 그러면 전투 준비 장소로 이동하게 되고 각자 할 일을 마친 다음 전투가 시작된다. 클리어 하면 죽은 파티원도 부활이 되고 전투 준비 장소로 이동한다.
파티원이 전부 죽은 경우엔 게임이 오버되고 시작화면으로 돌아가게 된다.
내가 맡은 역할은 스킬 부분이다. 스킬 데이터를 관리하고 구조를 작성할 때 인터페이스를 사용할지 Scriptable Object를 사용할지 CSV를 사용할지에 대해 생각해보아야 할 것 같다.
▶▷ 3D 최적화
렌더링 파이프라인 이해
- 3D를 2D 이미지로 실시간 변환하는 과정
- 유니티의 대표 파이프라인 단계:
3D 오브젝트 → 로컬 → 월드 → 뷰 → 프로젝션 → 클리핑 → 레스터라이즈 → 포스트 이펙트 → 최종 2D 이미지
(이 복잡한 과정에서 병목 현상을 만드는 지점을 단순화해야 최적화가 됨)
문제 진단 (프로파일링)
- Unity Profiler, Memory Profiler, Stats 창 등으로 CPU, GPU, 메모리 과부하 체크
- 배치 수, 드로콜 수, 프레임 확인
- 특정 구간에서 성능 저하가 발생하면 병목 구간 탐색
덜 그리기 (Draw Call 줄이기)
- 카메라 절두체 줄이기 (Clipping Plane, FOV, Far 조절)
- far 클리핑을 줄이면 멀리 있는 물체를 안 그려도 됨
- 너무 줄이면 잘림 현상 발생 → 포그(Fog)로 자연스럽게 감추기 가
- 오클루전 컬링 (Occlusion Culling)
- 큰 오브젝트가 뒤의 오브젝트를 가릴 때, 안 보이는 오브젝트 그리지 않음
- 오클루더(가리는 것)와 오클루디(가려지는 것) 설정
- Window > Rendering > Occlusion Culling에서 베이크 필요
- 주의: 오클루전 컬링은 CPU 계산량 증가 → 오히려 역효과 가능성 있음 (케이스별 테스트 필요)
같이 그리기 (Batching)
- 정적 배칭 (Static Batching)
- 움직이지 않는 오브젝트들을 하나의 메시로 결합하여 한 번에 렌더링
- Inspector > Static > Batching Static 체크
- 장점: 드로우콜 감소
단점: 메모리 사용량 증가
- GPU Instancing
- 동일한 머티리얼을 사용하는 오브젝트들을 GPU에서 한 번에 렌더링
- Material > Enable GPU Instancing 체크
- 특히 나무, 풀, 몬스터 등 반복되는 구조에 효과적
- 단, 머티리얼이 동일해야 함
라이트 최적화
- 라이트 모드
- Realtime: 절대 사용 최소화 (실시간 계산 → 성능 악영향)
- Baked: 빛의 영향을 텍스처처럼 미리 구워서 사용
- Mixed: 일부는 베이크, 일부는 리얼타임 (제한적 사용)
- 라이트 맵
- 정적인 환경 요소에 빛과 그림자 정보를 베이크
- 베이크 후 조명 위치가 바뀌면 다시 베이크 필요
- Unity > Lighting 창에서 제너레이트
- 라이트 프로브
- 움직이는 오브젝트가 베이크된 조명의 영향을 받을 수 있게 함
- 공간에 빛의 정보(색, 강도)를 보간해서 계산
- 라이트 프로브 그룹을 수동 배치해야 하며 관리 어려움
텍스처 최적화 (최후의 수단)
- 불필요 고해상도 텍스처는 메모리 낭비
- 3D 환경에서도 스프라이트 아틀라스와 같은 압축 필요
- Unity 자체로는 어렵기 때문에 외부 툴/유료 에셋 (Mesh Baker 등) 활용 추천
기타 주의사항
- 쉐이더는 멋지지만 성능 부하 극심 → 신중하게 사용
- 모든 최적화는 테스트 필수: 모든 기기에서 같은 결과 X
- 최적화는 항상 Trade-off (성능 vs 퀄리티 vs 메모리)
▶▷ 알게된 점
애니메이터 오버라이딩: 하나의 애니메이터에서 각각 다른 애니메이션을 적용시킬 수 있는 방법
'게임 개발 공부 기록' 카테고리의 다른 글
53일차 - Abyss_Slayer 최종 팀 프로젝트 3 (스킬셋, 스킬 로직) (0) | 2025.04.08 |
---|---|
52일차 - Abyss_Slayer 최종 팀 프로젝트 2 (스킬 데이터 구조 구성) (0) | 2025.04.07 |
50일차 - RPGProject 팀 프로젝트 마무리 (0) | 2025.04.03 |
49일차 - RPGProject 팀 프로젝트 5 (0) | 2025.04.02 |
48일차 - RPGProject 팀 프로젝트 4 (0) | 2025.04.01 |