[UE5 TIL] Day 3 - 블루프린트 기본 실습

JungHoon Eum·2026년 2월 25일

Unreal Blueprint 라이브 세션

오늘은 과제로 Unreal Engine5의 Level Blueprint 내부에서 간단한 총게임을 만들어 보는 시간을 가졌다. 사양으론

  • 좌클릭 시 총을 쏨. 총을 쏠 시 보유 총알이 한개씩 줄고, 총의 온도가 오름
  • 탄창이 비어있으면 총을 쏠 수 없고, 총이 과열될 시 총을 쏠 수 없음.
  • R 클릭 시 총을 장전함. 탄창이 다 차있을 시 장전 불가능.
  • T 클릭 시 총을 식힘
  • 1, 2, 3으로 각각 다른 탄창 용량과 온도 상승률을 가진 총으로 교체함.

이런 구조를 블루프린트로 구현해 보았다.

1번 과제 - 탄창 확인 구조

최초의 안내대로 좌클릭 시 "PrintString(Shoot)" 하고 Bullets에서 1씩 빼고, R 시 Bullet에 MaxBullet을 Set하는 형식의 블루프린트에선

- 30발 이상 격발 할 수 있는 버그
- 총알이 가득 차 있는 경우에도 재장전 되는 버그

이 두 버그들이 존재하였다.
총알을 30발 이상 격발하는 버그의 경우, 왼쪽 마우스 버튼을 눌렀을 시 현재 가진 Bullets가 0 이상인지를 확인하는 노드를 추가함으로써 해결할 수 있었다.

리로드 역시 현재 가지고 있는 Bullets가 사전에 설정해 둔 Max Ammo의 양보다 작다는 걸 확인하는 Branch를 추가하는 방식으로 해결이 가능했다.

2번 과제 - 과열 상태 구현

총을 쏠 때마다 지정해 둔 온도만큼(여기서는 1) 총의 온도가 오르고, 온도가 30도, 70도에 도달할 시 각각 High, Overheat! 상태로 만드는 과정이었다. 후에는 Enum으로 열상태를 관리하겠지만, 여기선 String 변수로 열상태를 관리하였다.

그리고 T를 눌렀을 시 1도씩 온도가 내려가고, 정해둔 온도 이하로 내려갔을 시 열상태를 다시 내려주는 기능도 구현하였다.

3번 과제 - 무기 교체 구현

무기 교체를 구현하기 전에, 그동안 쓰던 변수들을 재정립했다. 열 상태를 String으로 계속 관리하면 오타가 날 가능성도 높고, 메모리적으로 비효율적이기에 Enumerator를 사용해서 관리하도록 했다.

이후 구조체 파일을 새로 만들어, 탄창, 사격 시 오르는 온도 등 무기의 성질을 입력하고 블루프린트에서 해당 구조체의 array 변수를 만들어 각기 다른 성질을 가진 무기 3개를 만들었다.

레벨 블루프린트 내에 CurrentWeaponIndex 변수를 설정해, 각각 키보드 1, 2, 3을 눌렀을 시 대응되는 무기의 성질을 가져올 수 있도록 만들었다.

이제 위에 만들어 두었던 사격/재장전/쿨다운에 해당 구조체의 아이템을 각각 연결해 주면 되는데, 이 과정이 블루프린트 노드를 통하기에는 상당히 복잡했기에 가독성에 문제가 생기는 걸 해결할 방안이 있으면 좋겠다.

새로 배운 것

  • 구조체와 배열: 구조체는 새로운 변수 '타입' 을 만드는 것. 배열은 해당 변수들의 집합체 라고 아직까진 이해하고 넘어가면 될 듯 하다. 그리고 해당 구조체를 블루프린트 노드에서 활용하는 법 - 좀 난잡하지만 - 도 배울 수 있어서 좋았다.
profile
개발지망생

0개의 댓글