Files
Memory-Defense/TARGET.md
2026-04-16 19:40:42 +09:00

2.4 KiB

🎮 Project #1: "Memory Defense" (메모리 디펜스)

1. 사용 엔진: Unity (2D/3D 무관, 빠른 구현을 위해 2D 추천)

2. 게임 기획 (테마 및 룰): 매우 단순한 형태의 '원 스크린(One-Screen) 슈팅/디펜스' 게임입니다.

  • 플레이어: 화면 중앙에 고정되어 있습니다. (마우스 방향을 바라보게 하면 좋습니다)
  • 적: 화면 밖 사방에서 플레이어를 향해 끊임없이(그리고 점점 많이) 몰려옵니다.
  • 공격: 마우스를 클릭하면 총알이 날아가 적을 파괴합니다.
  • 목표: 적에게 닿기 전까지 최대한 오래 버티며 점수를 올립니다.

3. 🛠️ 기술 미션: "Instantiate / Destroy 사용 금지!" 이번 프로젝트의 핵심입니다. 유니티에서 게임이 플레이되는 도중에는 절대 Instantiate(생성)와 Destroy(파괴) 함수를 호출해서는 안 됩니다.

  • 해결 방법: 오브젝트 풀링(Object Pooling) 패턴을 직접 구현하세요.
  • 세부 제약:
    1. 게임이 시작될 때(Start 또는 Awake), 미리 총알 50개, 적 100개 등을 생성해두고 비활성화(SetActive(false)) 해둡니다.
    2. 총알을 쏘거나 적이 스폰될 때, 새로 생성하는 것이 아니라 풀(Pool)에서 꺼내와서 활성화시킵니다.
    3. 적이 죽거나 총알이 화면 밖으로 나가면, 파괴하는 것이 아니라 다시 비활성화하여 풀에 반환합니다.

💡 연우 님을 위한 기술적 TMI (왜 이걸 하나요?) Java와 C# 같은 가비지 컬렉터(GC) 기반 언어에서는, 런타임 중 잦은 메모리 할당(동적 생성)과 해제가 발생하면 메모리 파편화가 일어나고, 어느 순간 GC가 작동하며 게임에 렉(Spike)이 발생합니다. 최적화와 엔진의 동작 원리에 관심이 많은 연우 님이라면, 이 메모리 관리의 기초를 뼈저리게(?) 느껴보는 것이 아주 중요합니다.


마인드셋 팁:

  • 그래픽은 동그라미, 네모 같은 유니티 기본 도형(Sprite)만 써도 전혀 상관없습니다. 기획과 아트는 타협하세요!
  • 핵심은 "오브젝트 풀링 구조를 내가 얼마나 깔끔하게 코드로 짰는가?" 입니다. (예: Queue를 썼는가, List를 썼는가? Generic 타입으로 만들어서 적과 총알 모두 호환되게 만들었는가?)