본문 바로가기
내일배움캠프 Unity/본 캠프

[내일배움캠프][TIL] 34일차, 기획 W2D7 (2025-11-14)

by 승연 2025. 11. 14.

목표

총알 피하기 게임에서 플레이어에게 날라오는 총알 시스템을 기획하기

 

학습 내용

개요

이 문서는 게임의 메인 기믹인 총알 시스템의 기획 문서이다.

개발 목적

  • 플레이어에게 긴장감과 성취감을 주는 탄막을 구현한다.
  • 점진적으로 증가하는 난이도로 플레이어의 도전 욕구를 자극한다.

제안 배경

  • 단순하지만 중독성 있는 플레이 아이템이 필요하다.
  • 플레이어가 명확하게 알 수 있는 직관적인 위험 요소로 게임에 쉽게 접근할 수 있도록 한다.

기대 효과

  • 높은 점수를 기록하고, 다른 플레이어와 경쟁을 위한 반복적인 플레이를 유도한다.

의도한 경험과 감정

  • 적은 수의 총알로 여유롭게 시작하지만, 시간이 지날수록 늘어나는 총알은 플레이어에게 긴장감과 스릴을 주고 고도의 집중력을 요구한다.
  • 짧은 플레이 타임과 생존 시간에 따른 랭킹 시스템을 이용해 플레이어가 재도전하게끔 동기를 자극한다.

상세 기획

기능 정의

  1. 총알 생성 및 제거
    1. 총알은 카메라 범위(Camera.main.ViewportToWorldPoint)의 선 위에서 랜덤하게 생성된다.
      1. 생성 가능 위치 : 카메라의 상하좌우 4개 변
      2. 사용 메서드 : Vector3 GetRandomSpawnPosition()
      3.  

 

 

 

  1. 게임 시작(Start()) 시 생성되는 총알의 개수 : 50개
    1. 첫 생성은 기본탄(35%), 고속탄(50%)만 생성된다.
    2. 추적탄은 이후 생성부터 등장한다.
  2. 총알 타입별 생성 확률이 다르다.
    1. Random.Range(0f, 100f)로 확률 판정을 한다.
      1. 0~35 : 기본탄
      2. 35~85 : 고속탄
      3. 85~100 : 추적탄
  3. 카메라 밖으로 나간 총알은 제거된다.
    1. 카메라 밖 판정 : Camera.main.WorldToViewportPoint() 범위 체크
    2. 제거 메서드 : Destroy(gameObject) 또는 SetActive(false)
  4. 카메라 안에 있는 총알 개수가 현재 총알의 개수보다 적을 경우, 부족한 만큼 새로운 총알을 생성한다.
    1. Update() 또는 Coroutine으로 총알 오브젝트 개수 체크
    2. 카메라 내 총알 < 목표 개수 → 부족한 만큼 생성
    3. 목표 개수는 시간에 따라 증가한다.
  5. 총알 타입
    1. 기본탄
      1. 색상 : 주황색 / new Color(250/255f, 185/255f, 97/255f, 1f) 또는 rgba(250, 185, 97)
      2. 크기 : 6px → Scale 약 Vector3(0.06f, 0.06f, 1f) (PPU 100 기준)
      3. 속도 : 100px/s → 약 1 unit/s (PPU 100 기준)
      4. 이동 패턴 : 직선 이동, 일정 확률로 반대 방향으로 전환
        1. 직선 이동 → (transform.Translate(direction * speed * Time.deltaTime))
        2. 반대 방향 전환 : 생성 후 1초마다 20% 확률로 진행 방향 반전
      5. 생성 확률 : 35%
    2. 고속탄
      1. 색상 : 주황색 / new Color(250/255f, 185/255f, 97/255f, 1f) 또는 rgba(250, 185, 97)
      2. 크기 : 4px → Scale 약 Vector3(0.04f, 0.04f, 1f) (PPU 100 기준)
      3. 속도 : 200px/s → 약 2 unit/s (PPU 100 기준)
      4. 이동 패턴 : 직선
      5. 생성 확률 : 50%
    3. 추적탄
      1. 색상 : 파란색 / new Color(171/255f, 237/255f, 255/255f, 1f) 또는 rgba(171, 237, 255)
      2. 크기 : 8px → Scale 약 Vector3(0.08f, 0.08f, 1f) (PPU 100 기준)
      3. 속도 : 150px/s → 약 1.5 unit/s (각속도)
      4. 이동 패턴 : 원형 궤도로 플레이어 추적
        1. 회전 반경 : 2 units
      5. 생성 확률 : 15%
  6. 난이도 상승
    1. 게임 시작 후 2초 경과 시 총알 개수 1개 증가
      1. 증가 간격 : 2초
      2. 증가량 : 1개
      3. Update() 에서 프레임마다 목표 개수를 계산하고 부족한 만큼 생성한다.

규칙

  • 플레이어가 총알과 충돌 시 게임 오버된다.
  • 생존 시간이 점수가 된다.

데이터 테이블

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

 

 

 

 

 

셀프 피드백

어느정도까지 자세하게 기능 구현에 대한 설명을 넣어야 되는가를 고민하다가 너무 많은 걸 적어버렸다......

메서드 이름이나 무슨 함수를 쓰는지 이런 건 안써도 되는걸로....ㅠ