목표
총알 피하기 게임에서 플레이어에게 날라오는 총알 시스템을 기획하기
학습 내용
개요
이 문서는 게임의 메인 기믹인 총알 시스템의 기획 문서이다.
개발 목적
- 플레이어에게 긴장감과 성취감을 주는 탄막을 구현한다.
- 점진적으로 증가하는 난이도로 플레이어의 도전 욕구를 자극한다.
제안 배경
- 단순하지만 중독성 있는 플레이 아이템이 필요하다.
- 플레이어가 명확하게 알 수 있는 직관적인 위험 요소로 게임에 쉽게 접근할 수 있도록 한다.
기대 효과
- 높은 점수를 기록하고, 다른 플레이어와 경쟁을 위한 반복적인 플레이를 유도한다.
의도한 경험과 감정
- 적은 수의 총알로 여유롭게 시작하지만, 시간이 지날수록 늘어나는 총알은 플레이어에게 긴장감과 스릴을 주고 고도의 집중력을 요구한다.
- 짧은 플레이 타임과 생존 시간에 따른 랭킹 시스템을 이용해 플레이어가 재도전하게끔 동기를 자극한다.
상세 기획
기능 정의
- 총알 생성 및 제거
- 총알은 카메라 범위(Camera.main.ViewportToWorldPoint)의 선 위에서 랜덤하게 생성된다.
- 생성 가능 위치 : 카메라의 상하좌우 4개 변
- 사용 메서드 : Vector3 GetRandomSpawnPosition()
- 총알은 카메라 범위(Camera.main.ViewportToWorldPoint)의 선 위에서 랜덤하게 생성된다.

- 게임 시작(Start()) 시 생성되는 총알의 개수 : 50개
- 첫 생성은 기본탄(35%), 고속탄(50%)만 생성된다.
- 추적탄은 이후 생성부터 등장한다.
- 총알 타입별 생성 확률이 다르다.
- Random.Range(0f, 100f)로 확률 판정을 한다.
- 0~35 : 기본탄
- 35~85 : 고속탄
- 85~100 : 추적탄
- Random.Range(0f, 100f)로 확률 판정을 한다.
- 카메라 밖으로 나간 총알은 제거된다.
- 카메라 밖 판정 : Camera.main.WorldToViewportPoint() 범위 체크
- 제거 메서드 : Destroy(gameObject) 또는 SetActive(false)
- 카메라 안에 있는 총알 개수가 현재 총알의 개수보다 적을 경우, 부족한 만큼 새로운 총알을 생성한다.
- Update() 또는 Coroutine으로 총알 오브젝트 개수 체크
- 카메라 내 총알 < 목표 개수 → 부족한 만큼 생성
- 목표 개수는 시간에 따라 증가한다.
- 총알 타입
- 기본탄
- 색상 : 주황색 / new Color(250/255f, 185/255f, 97/255f, 1f) 또는 rgba(250, 185, 97)
- 크기 : 6px → Scale 약 Vector3(0.06f, 0.06f, 1f) (PPU 100 기준)
- 속도 : 100px/s → 약 1 unit/s (PPU 100 기준)
- 이동 패턴 : 직선 이동, 일정 확률로 반대 방향으로 전환
- 직선 이동 → (transform.Translate(direction * speed * Time.deltaTime))
- 반대 방향 전환 : 생성 후 1초마다 20% 확률로 진행 방향 반전
- 생성 확률 : 35%
- 고속탄
- 색상 : 주황색 / new Color(250/255f, 185/255f, 97/255f, 1f) 또는 rgba(250, 185, 97)
- 크기 : 4px → Scale 약 Vector3(0.04f, 0.04f, 1f) (PPU 100 기준)
- 속도 : 200px/s → 약 2 unit/s (PPU 100 기준)
- 이동 패턴 : 직선
- 생성 확률 : 50%
- 추적탄
- 색상 : 파란색 / new Color(171/255f, 237/255f, 255/255f, 1f) 또는 rgba(171, 237, 255)
- 크기 : 8px → Scale 약 Vector3(0.08f, 0.08f, 1f) (PPU 100 기준)
- 속도 : 150px/s → 약 1.5 unit/s (각속도)
- 이동 패턴 : 원형 궤도로 플레이어 추적
- 회전 반경 : 2 units
- 생성 확률 : 15%
- 기본탄
- 난이도 상승
- 게임 시작 후 2초 경과 시 총알 개수 1개 증가
- 증가 간격 : 2초
- 증가량 : 1개
- Update() 에서 프레임마다 목표 개수를 계산하고 부족한 만큼 생성한다.
- 게임 시작 후 2초 경과 시 총알 개수 1개 증가
규칙
- 플레이어가 총알과 충돌 시 게임 오버된다.
- 생존 시간이 점수가 된다.
데이터 테이블
| Index | Name | Size | Speed | Spawn_Probability | Movement_Pattern |
| 11 | Basic | 6 | 100 | 35 | Straight |
| 12 | Fast | 4 | 200 | 50 | Straight |
| 13 | Homing | 8 | 150 | 15 | Circle |
셀프 피드백
어느정도까지 자세하게 기능 구현에 대한 설명을 넣어야 되는가를 고민하다가 너무 많은 걸 적어버렸다......
메서드 이름이나 무슨 함수를 쓰는지 이런 건 안써도 되는걸로....ㅠ
'내일배움캠프 Unity > 본 캠프' 카테고리의 다른 글
| [내일배움캠프][TIL] 36일차, 기획 W2D9 (2025-11-18) (0) | 2025.11.18 |
|---|---|
| [내일배움캠프][TIL] 35일차, 기획 W2D8 (2025-11-17) (0) | 2025.11.17 |
| [내일배움캠프][TIL] 33일차, 기획 W2D6 (2025-11-13) (0) | 2025.11.13 |
| [내일배움캠프][TIL] 32일차, 기획 1주차 과제 제출 (2025-11-12) (0) | 2025.11.12 |
| [내일배움캠프][TIL] 31일차, 기획 W1D4 (2025-11-11) (0) | 2025.11.11 |