[Day 3] Text Shooting Game

베리투스·2025년 8월 6일

TIL: Today I Learned

목록 보기
11/93

ㅁ Learning

전체 기능 흐름 요약

기능입력 키설명
무기 전환0, 1, 2Pistol, Shotgun, Rifle로 전환
격발Left Mouse Button탄약 감소 + 온도 상승
재장전R무기 별 최대 탄약으로 리셋
수동 쿨다운T온도 -10도 (0도 이하 방지)

🔫격발 (Left Mouse Button)

  • 현재 무기 정보 가져오기
    • NewWeapon[CurrentWeaponIndex] 배열 인덱스를 기반으로 무기 구조체를 가져옵니다.
    • 구조체를 Break해서 BulletCount, CurrentTemperature, CurrentHeatState 등을 분리합니다.
  • 발사 가능 여부 체크
    • 조건 1: 탄약(BulletCount)이 0보다 큰가?
    • 조건 2: 현재 과열 상태(CurrentHeatState)가 Over가 아닌가?
    • 이 두 조건을 AND로 연결한 후 Branch로 분기합니다.
  • 과열 상태 출력
    • 만약 무기가 과열(Over) 상태라면, "Warning: Overheat!" 메시지를 출력하고 종료합니다.
  • 격발 처리 (발사 성공 시)
    • 탄약 1발 소모 (BulletCount - 1)
    • 무기 온도 1 상승 (CurrentTemperature + 1)
    • 온도값을 Clamp(0~100)으로 제한하여 비정상 수치를 방지합니다.
  • 열 상태 재계산
    • 온도 범위에 따라 상태를 변경:
      • 0~30: Normal
      • 31~70: High
      • 71~100: Over
    • Enum → String 변환 후 출력하여 현재 상태를 확인할 수 있게 합니다.
  • NewWeapon 배열 업데이트
    • 변경된 값을 바탕으로 새 Weapon 구조체를 생성
    • Set Array Elem 노드를 사용하여 NewWeapon[CurrentWeaponIndex]에 덮어쓰기
    • 이로써 무기 상태가 실제 배열에 반영됩니다.
  • 디버깅용 Print 출력
    • 현재 탄약 수, 온도, 상태를 각각 Print String으로 출력
    • 메시지를 크고 보기 좋게 만들기 위해 Duration을 2.0으로 설정

❄️ 쿨다운 (T 키)

  • 현재 무기 정보 가져오기
    • NewWeapon[CurrentWeaponIndex]를 이용해 현재 무기 구조체를 가져옵니다.
    • Break Weapon으로 분리하여 온도, 탄약, 이름 등 정보 사용.
  • 쿨다운 조건 검사
    • CurrentTemperature != 0 조건 확인
    • 온도가 0이면 더 이상 낮출 수 없으므로 "ZeroTemp" 메시지를 출력하고 종료.
  • 쿨다운 실행
    • 온도를 -10 감소시키되, Clamp 노드를 사용해 최소값을 0으로 제한합니다.
    • 이로써 음수 온도값 방지.
  • 열 상태(HeatState) 재계산
    • 온도에 따라 열 상태를 변경:
      • 0~30 → Normal
      • 31~70 → High
      • 71~100 → Over
  • NewWeapon 배열 업데이트
    • 변경된 구조체를 Set Array Elem으로 NewWeapon[CurrentWeaponIndex]에 덮어쓰기
  • NewCurrentHeatState 동기화
    • Set HeatState 함수 등을 통해 현재 무기의 열 상태도 변수에 반영
  • 디버그 메시지 출력
    • "Cooldown!" 메시지와 함께 현재 온도를 Print String으로 출력

🧃 재장전 (R 키)

  • 현재 무기 정보 가져오기

    • NewWeapon[CurrentWeaponIndex]를 통해 현재 무기를 가져옵니다.
    • 무기 이름(WeaponName)을 기준으로 Switch on Name으로 분기합니다.
      • Pistol
      • Shotgun
      • Rifle
  • 탄약 최대치 비교 및 분기

    • 각 무기 이름에 따라 지정된 탄약 수:
      • Pistol: 최대 10발
      • Shotgun: 최대 5발
      • Rifle: 최대 30발
    • 현재 BulletCount가 이미 최대치인지 비교합니다.
      • 같으면 "Already Full" 메시지 출력 후 종료
      • 부족하면 재장전 수행
  • 탄약 수 갱신

    • 해당 무기의 탄약 수를 최대 탄약 수로 설정합니다.
    • 기존의 구조체 값에서 BulletCount만 갱신하여 Make Weapon 생성
    • Set Array Elem 노드로 NewWeapon[CurrentWeaponIndex]에 덮어쓰기
  • 디버깅 메시지 출력

    • "Reload" 메시지 출력
    • 변경된 탄약 수를 Print String으로 확인

🎮무기 교체 (0~2키)

  • 숫자 키 입력 처리

    • Keyboard 0CurrentWeaponIndex = 0 (Pistol)
    • Keyboard 1CurrentWeaponIndex = 1 (Shotgun)
    • Keyboard 2CurrentWeaponIndex = 2 (Rifle)
  • 무기 정보 가져오기

    • NewWeapon[CurrentWeaponIndex]를 통해 현재 선택된 무기의 구조체를 가져옴
    • Break Weapon으로 탄약, 온도, 상태, 이름 등을 개별적으로 추출
  • 무기 상태 출력

    • BulletCount, CurrentTemperature, CurrentHeatState 값을 각각 ToString 처리
    • Append 노드로 문장을 구성 (예: "🔫 Ready! | Bullet: 8 | State: High")
    • Print String으로 화면에 2초간 표시

🔁 열 상태 갱신 (SetHeatState 함수)

  • 현재 무기 정보 가져오기

    • NewWeapon[CurrentWeaponIndex]로 현재 무기 구조체를 가져옵니다.
    • CurrentTemperature 값을 기준으로 열 상태를 판단합니다.
  • 조건 분기 (온도 검사)

    • CurrentTemperature > 70HeatState = Over
    • CurrentTemperature > 30HeatState = High
    • 나머지 경우 → HeatState = Normal
  • HeatState 값 업데이트

    • 계산된 HeatState를 사용해 새 구조체를 Make Weapon으로 생성
    • Set Array Elem을 사용해 NewWeapon[CurrentWeaponIndex]에 저장
    • 온도 외 모든 값은 기존 무기 정보 그대로 유지
  • 현재 상태 출력

    • Enum to String으로 열거형 상태를 문자열로 변환
    • Print String으로 화면에 상태 출력 (Duration 2.0초)
profile
Shin Ji Yong // Unreal Engine 5 공부중입니다~

0개의 댓글