TIL_008 (text기반 총게임, overlap)

김펭귄·2025년 8월 6일

Today What I Learned (TIL)

목록 보기
8/105

text기반 총게임 만들기

게임 기획

  • Rifle, ShotGun, Pistol 총을 각 1, 2, 3번에 배정하여 마우스 좌클릭시 발사

  • 총알이 다 떨어지거나, 총의 온도가 100도가 넘어가면 발사 불가능

  • R을 눌러 재장전하거나, T를 눌러 온도를 10도씩 낮추며 관리

게임 구현

무기 data

  • 각 무기의 정보를 저장할 Weapon구조체 설정

  • 각 무기의 Weapon구조체를 NewWeapon이라는 배열에 저장

함수 구현

Fire

  • 총 쏘는 함수

  • ChangeAmmo를 통해 탄알 소비, ChangeTemperature을 통해 온도 조정, Print를 통해 현재 총의 상태를 확인

ChangeAmmo

  • 총을 쏘거나, 재장전시 호출되는 함수

  • Delta값에 따라 현재 총의 총알 개수를 변경

  • 총알의 개수가 0 미만으로 내려갈 경우 "No Ammo"를 출력

  • 총알의 개수가 Max Ammo 이상으로 넘어가지 않도록 설정

ChangeTemperature

  • 총 쏠 때마다 현재 총의 온도를 1도씩 높여주는 함수

  • 함수 마지막에 ChangeHeatState를 호출

ChangeHeatState

  • 현재 총의 온도에 따라 과열 상태를 저장하는 함수

Print

  • 현재 들고 있는 총기의 상태를 화면에 출력하는 함수

Reload

  • 재장전 함수

CoolDown

  • 총의 온도를 10도 낮춰주는 함수

키 mapping

게임 플레이

오버랩, 충돌이벤트

Trigger Box

  • overlap을 감지하게 해주는 것

  • 캐릭터가 특정 위치 도달 시 문이 열리거나, 적이 인식하는 등의 이벤트를 구현 가능

  • overlap 관련 함수 사용 가능

Box/Sphere Collision

  • Overlap, Block의 기능을 제공하는 Component

  • Trigger Box와 마찬가지로 overlap 관련 node 사용 가능

Begin Overlap

  • EventGraph에서 begin overlap을 검색하여 노드를 생성 시 2가지 node가 생성될 수 있다.

  • 위의 Add On Component Begin Overlap은 component로 추가한 collision을 선택했을 시 사용 가능하며, 이 component의 overlap시 작동하는 node이다

  • 아래의 Event ActorBeginOverlap은 해당 Actor와의 overlap시 작동하는 node이다

캐릭터를 계속 주시하는 적 만들기

  • Cast To BP_Character를 이용해 Actor와 overlap이 일어난 Other ActorBP_Character일 경우에만 적이 주시하도록 하였음

  • 항상 주시하도록 하기 위해 Event Tick에 구현

  • Is Valid를 통해 As BP Character가 값이 있는지 없는지 확인

  • 있을 경우에만(Overlap되었을 경우) 캐릭터 방향으로 rotation 하도록 설정

  • Lerp를 통해 적이 부드럽게 회전하도록 설정
    Alpha값에 Delta Seconds를 넣어 매 frame이 지난 시간만큼 회전하도록 설정

  • 결과

이상한 회전 감지

  • 결과 영상에서 보이듯이 90도만 돌면 될 것을 갑자기 반대방향으로 270도를 돌아버리는 상황 발생

  • 이는 단순 선형보간만을 하는 Lerp의 문제로, 최단 경로 회전을 보장하지 않아서 발생

해결법

  • Lerp대신 RInterp To 사용
profile
반갑습니다

0개의 댓글