오늘의 목표 

  • 블루프린트가 무엇인지 배우고 변수, 이벤트 함수에 대해 배워본다
  • Branch, Sequence, 함수에 대해 배워보고 이를 이용하여 간단한 과제를 진행해본다
  • While, For, Array, ForEach, 열거형, 구조체, Switch에 대해 배워보고 간단한 과제를 진행해 본다

TIL에는 과제 내용만 기록할 것이다.

 


 

BeginPlay() 이벤트 함수와 PrintString() 함수 실습

 

레벨 블루프린트에서, 플레이가 시작되면 "BeginPlay"라는 텍스트를 출력하는 코드 설계.

 

뷰포트 화면 왼쪽 위에 BeginPlay라는 메세지가 뜨는 것을 확인했다.

 

 

블루프린트 변수 실습

 

MyBlueprint > VARIABLES > "blsGameStarted" (Boolean type) 추가

 

Tip: 언리얼에서는 대부분 변수 이름을 대문자로 시작함. boolean 타입의 경우 소문자 b를 앞에 붙임.

bIsGameStarted 로 작성하면 된다.

 

컴파일 후 Default Value가 false인 것을 확인했다.

 

블루프린트 변수의 Get, Set 노드 실습

아까 만든 bIsGameStarted의 Get과 Set을 불러온다.

변수를 마우스로 끌어와서 Get/Set을 선택해서 만들 수도 있고, 단축키를 사용할 수도 있다.

각각

Ctrl + 드래그 → Get 노드

Alt + 드래그 → Set 노드

 

bIsGameStarted 변수의 값을 true로 설정하고, 해당 변수의 값을 String으로 출력

 

뷰포트에 true가 잘 출력되었다.

 

Branch와 Sequence 실습

 

 

if-else 조건문과 같다.

Condition이 True일 경우 True에 해당되는 노드 실행, False일 경우 False에 해당되는 노드를 실행한다.

 

TickCount와 Branch 노드 실습

해당 코드는 Event Tick으로 Tick이 하나씩 증가할 때마다 integer 변수 TickCount로 Tick의 개수를 세면서 값을 출력하고, Tick Count가 777보다 큰지 작은지도 함께 출력한다.

 

 

<오류> 실행해보니 Tick Count > 777이라고 출력된다.

<수정>아직 TickCount의 값이 777보다 작으므로 Tick Count < 777라고 출력되어야한다.

복사 붙여넣기를 해놓고 Tick Count의 부등호를 고치지 않았다. 다시 고쳐준다.

 

 

 

 

 

<해결>

정상적으로 Tick Count <<777가 뜬다.

 

 

TickCount가 777을 넘기자 정상적으로 Tick Count > 777 이라는 메세지가 뜬다. 

 

 

Sequence 노드 실습

 

Sequence로 두 가지 기능을 분리했다.

Then 0에 TickCount를 증가시키고 출력하는 노드를 연결하고, Then 1에 777보다 작은지 큰지 출력하는 노드를 연결했다.

 

 

 

정상 작동 확인.

 

 

입력 관련 이벤트 함수

 

 

텍스트 슈팅 게임 기획

  • 총알은 기본적으로 30발
  • 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.
  • 키보드 R을 누르면 재장전되어 총알 30발로 충전됨.

<문제> 총알은 기본적으로 30발 구현

<구상> Bullets integer 변수를 만들어서 default 값을 30으로 설정하면 될 것 같다. 

 

<구현>

 

<문제> 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.

<구상> 마우스 좌클릭을 할 때마다 Bullets의 값이 하나씩 줄어들도록 subtract 연산자 사용.

<구현>

*추가 구현: Format Text를 사용해 "Bang! (남은 총알 갯수) Bullets Left" 라는 메세지를 출력하도록 함.

 

<실행>

 

정상 작동 확인.

 

<문제> 키보드 R을 누르면 재장전되어 총알 30발로 충전됨

<구상> 키보드 R 입력을 받아 Bullets의 값을 30으로 Set하면 될 것 같다.

<구현> 

*추가 구현: 마찬가지로 Format Text를 사용하여 "Reloaded! {Bullets} Bullets Left"라는 메세지를 출력시킨다.

 

<실행>

정상 작동 확인.

 

 

텍스트 슈팅 게임 버그 고치기

<문제> 30발 이상 격발 할 수 있는 버그 

<구상> 해당 버그는 남은 Bullet 수가 0 이하로 내려가도 마이너스대로 감소시킬 수 있기 때문에 발생하는 버그이다. 제한을 걸어 0에 도달하면 Bullets의 값을 감소시킬 수 없도록 만들어야 한다. 이를 위해 branch 함수를 사용한다.

Bullets >= 0 이 true일 경우 총알의 개수를 감소시키고, false일 경우 아무것도 하지 않는다.

 

<구현> 

구상한 대로 구현했다.

 

 

 

<실행>

<오류> -1까지 Bullets 값이 내려간다.

<수정> Branch condition을 Bullets >= 0으로 만들어서 0일때도 -1 연산이 적용되는게 문제. 그러면 Bullets > 0으로 바꿔서 해결해본다.

 

수정 하는 김에 Bullets가 0이 되었을 때 "Out of ammo..."를 출력하는 코드도 추가했다.

 

 

 

<해결>

정상적으로 0일 때 더이상 발사 되지 않고, Out of ammo 메세지도 뜬다.

그런데 Out of ammo 색깔이 빨간색이면 더 좋을 것 같아서 바꾸겠다.

 

 

해결!

 

 

 

<문제> 총알이 가득차 있는 경우에도 재장전 되는 버그

총알이 30발 가득 차 있을 경우에 더이상 재장전 되지 않게끔 하고, "Already full" 이라는 문구를 출력하면 좋다.

<구상> 여기서도 Branch를 사용한다.

Bullets >= 30이 true일 경우: "Already full"이라는 문구를 출력한다.

Bullets >= 30이 false일 경우: 기존의 재장전 로직을 사용하여 재장전을 실행한다.

 

<구현>

 

<실행>

제대로 잘 작동한다. 이것도 "Already full..." 메세지를 빨갛게 해보자.

 

해결!

 

 

텍스트 슈팅 게임 기능 추가하기 

<문제> 과열 상태 추가

여러 발을 격발할 경우, 총기가 과열될 수 있습니다.

CurrentTemperature라는 속성을 추가하고 한 발당 1씩 증가하게끔 로직을 짜봅시다. 그리고 CurrentHeatState라는 속성을 추가하고, CurrentTemperature가 0~30까지는 CurrentHeatState가 ”Normal” CurrentTemperature가 31~70까지는 CurrentHeatState가 ”High” CurrentTemperature가 71이상은 CurrentHeatState가 ”Over”로 설정되게끔 합니다.

 

<구상> CurrentTemperature integer 변수를 만들고, add 노드를 사용해 1씩 증가시킨다.

Switch 노드를 사용하여 Current Temperature의 값에 따라 CurrentHeatState의 값을 다르게 한다.

여기서 CurrentHeatState의 상태는 Enumeration을 이용해서 설정한다.

 

 

<구현> 

 

새로운 Enum 만들기

Enumberator Normal, High, Over를 추가해준다.

 

 

 

 

변수 생성 완료.

 

<수정> switch로 Enum값을 정해보려고 했는데 branch로 일단 CurrentTemperature의 값을 나누어야 해서 Branch로 방향

을 틀었다.

 

답을 확인해보자.

 

답에서는 기본적인 String을 사용해서 CurrentHeatState를 정하긴 했으나 그걸 제외하면 로직은 비슷한 것 같다.

print String을 이용해서 값을 출력하는 노드만 추가해본다.

 

 

<실행>

<오류> 영원히 Normal만 뜬다.

<수정> 99% CurrentTemperature 증가 문제일 것이라고 생각한다. 이제보니 노드 연결을 이상하게 해놨다.

 

이렇게 바꿔서 연결했다. 기억에 의존해서 했는데 맞는지 확인해보자.

 

<실행>

<오류> 처음에는 normal이 떠야하는데 이제 High가 뜬다...

뭐가 문제인지 알아보기 위해 CurrentTemperature 값을 출력시켜보겠다.

 

CurrentTemperature 값은 잘 뜨는데 High가 뜬다. 온도 설정 부분을 자세히 보자.

 

부등호가...잘못되었다...

 

올바르게 0 <= CurrentTemperature <= 30으로 바꿔준다.

 

 

 

드디어 정상작동한다. 

 

쿨다운 기능

<문제> 특정 키를 누를때마다 총기의 온도가 내려가게끔 구현해봅시다.

T키를 누르면 CurrentTemperature를 1씩 감소하게끔 로직을 작성해보세요. CurrentTemperature가 변하면 CurrentHeatState도 그에따라 변해야합니다.

<구상> -- 노드를 사용하여 1씩 감소시키고, Temperature 값을 다시 범위에 맞게 분류해서 CurrentHeatState를 변화시킨다. 앞 문제에서 만든 로직을 함수로 만들어 재사용하는 게 좋을 것 같다.

 

<구현>

print string 부분은 빼고 set 하는 부분까지만 함수로 만들었다.

 

일단 기존의 로직을 대체해서 잘 작동하는지 보자.

 

 

 

<실행>

....?

뭐가 문제인지 아직 모르겠다.

일단은 여기까지.

 

오늘 배운 것: 블루프린트 연산에 대한 추가 지식, C/C++ 반복문

 

오늘의 반성점: 부등호와 같은 사소한 연산을 틀리지 않게 조심할 것. 기억에서만 의존해서 로직을 짜려고 하지 말고 자료를 제때제때 볼 것. 붙잡고 있으면 시간 낭비!!

 

내일 해야할 것: 쿨다운 로직 마저 짜기

'Unreal5 공부 > TIL' 카테고리의 다른 글

2026/03/04 TIL  (1) 2026.03.04
2026/03/03 TIL  (0) 2026.03.03
2024/02/24 TIL  (0) 2026.02.24
2026/2/23 TIL  (0) 2026.02.23
2026/02/19 TIL  (0) 2026.02.19

+ Recent posts