2.4 KiB
2.4 KiB
🎮 Project #1: "Memory Defense" (메모리 디펜스)
1. 사용 엔진: Unity (2D/3D 무관, 빠른 구현을 위해 2D 추천)
2. 게임 기획 (테마 및 룰): 매우 단순한 형태의 '원 스크린(One-Screen) 슈팅/디펜스' 게임입니다.
- 플레이어: 화면 중앙에 고정되어 있습니다. (마우스 방향을 바라보게 하면 좋습니다)
- 적: 화면 밖 사방에서 플레이어를 향해 끊임없이(그리고 점점 많이) 몰려옵니다.
- 공격: 마우스를 클릭하면 총알이 날아가 적을 파괴합니다.
- 목표: 적에게 닿기 전까지 최대한 오래 버티며 점수를 올립니다.
3. 🛠️ 기술 미션: "Instantiate / Destroy 사용 금지!"
이번 프로젝트의 핵심입니다. 유니티에서 게임이 플레이되는 도중에는 절대 Instantiate(생성)와 Destroy(파괴) 함수를 호출해서는 안 됩니다.
- 해결 방법: 오브젝트 풀링(Object Pooling) 패턴을 직접 구현하세요.
- 세부 제약:
- 게임이 시작될 때(Start 또는 Awake), 미리 총알 50개, 적 100개 등을 생성해두고 비활성화(
SetActive(false)) 해둡니다. - 총알을 쏘거나 적이 스폰될 때, 새로 생성하는 것이 아니라 풀(Pool)에서 꺼내와서 활성화시킵니다.
- 적이 죽거나 총알이 화면 밖으로 나가면, 파괴하는 것이 아니라 다시 비활성화하여 풀에 반환합니다.
- 게임이 시작될 때(Start 또는 Awake), 미리 총알 50개, 적 100개 등을 생성해두고 비활성화(
💡 연우 님을 위한 기술적 TMI (왜 이걸 하나요?) Java와 C# 같은 가비지 컬렉터(GC) 기반 언어에서는, 런타임 중 잦은 메모리 할당(동적 생성)과 해제가 발생하면 메모리 파편화가 일어나고, 어느 순간 GC가 작동하며 게임에 렉(Spike)이 발생합니다. 최적화와 엔진의 동작 원리에 관심이 많은 연우 님이라면, 이 메모리 관리의 기초를 뼈저리게(?) 느껴보는 것이 아주 중요합니다.
마인드셋 팁:
- 그래픽은 동그라미, 네모 같은 유니티 기본 도형(Sprite)만 써도 전혀 상관없습니다. 기획과 아트는 타협하세요!
- 핵심은 "오브젝트 풀링 구조를 내가 얼마나 깔끔하게 코드로 짰는가?" 입니다. (예: Queue를 썼는가, List를 썼는가? Generic 타입으로 만들어서 적과 총알 모두 호환되게 만들었는가?)