Unreal_Engine🎮/TIL📖

[ Unreal Engine ] TIL 📖 ( 3 )

pseonu 2024. 12. 18. 22:32

DAY 3 블루프린트를 이용한 비주얼 스크립팅

 

블루프린트

 

이런 창 위에 스크래치 프로그램처럼 블록을 연결하여 코드를 만드는 방식이다.

 


오늘의 과제 

강의시간에는 아래 조건을 만족하는 텍스트 슈팅 게임을 만들었는데

  • 총알은 기본적으로 30발이 주어집니다.
  • 마우스 좌클릭을 할 때마다 총알이 1발씩 발사됩니다.
  • 키보드 R을 누르면 총알 30발이 재장전됩니다.

이를 응용한 문제 4개와 추가 문제 2개를 더 해봤다.

 

1.총알 발사 버그 (30번 이상은 불가능하도록)

강의시간에 만든 텍스트 슈팅 게임은 총알이 30발임에도 불구하고 더 쏘면 총알 갯수가 -로 찍히고 무한슈팅이 가능했다.

이를 수정하기위해

마우스 클릭 이벤트 이후 Branch를 이용하여 Bullet 갯수가 0보다 클 때 총을 쏘고, 0개일때는 총알이 없다는 문구를 출력하도록 만들었다.

 

 

2.총알 재장전 버그 (30발 가득차있을때 재장전 불가능하도록)

기존 게임은 총알이 30발로 가득 차 있는 새 탄창임에도 재장전이 가능했다.

이를 막기 위해서

R키(장전)를 누른 후 Branch를 이용하여 총알이 30발보다 적을 때에는 "총알이 가득 차서 장전할 수 없다"는 문구를 표시하도록 설정하였다.

 

3. 총알 피격 기능 (HP와 Damage 노드를 생성)

적의 HP노드를 생성하여 기본값을 정하고 (100) 총을 쏠 때마다 일정 데미지씩(10) 깎이도록 설정하였다.

데미지를 많이 받아서 적 HP가 0이 될 경우 "적을 처치했습니다" 라는 문구와 총을 더 쏘면 "적이 없습니다" 문구까지 출력하도록 설정했다.

 

4. 체력 회복 기능 ( Heal 노드 생성 )

이 게임에서는 적이 때려서 플레이어 HP가 깎인다는 설정이 없어서 반대로 적의 HP가 깎였을 때 피를 채울 수 있는 기능을 만들었습니다. H버튼을 누르면 피가 20 차게 되고 총 3번까지 쓸 수 있도록, 3번을 다 사용하면 "힐이 없습니다" 문구를 출력하도록 만들었다.

 

최종적으로 결과는

이런식으로 나왔는데 기능으로는 

 

좌클릭 -> 적의 감소한 HP와 남은 총알 수를 보여줌

적의 피가 0 -> 적을 처치했습니다 라는 문구

e키 -> 적이 다시 생성(적의 HP를 100으로 세팅)

총알이 0발 -> 총알이 없습니다 라는 문구

r키 -> 재장전(총알갯수 30개로 세팅),

총알이 30발일 때(새 탄창) 장전을 누르면 -> 장전이 안된다는 문구

h키 -> 적 체력+20 , 남은 힐 카운트 -1(최대 3)

 

등이 있다. 

 

5. While Loop 구구단

강의시간에는 For 루프를 통해 구구단을 출력하도록 제작하였는데 과제는 While을 이용하여 제작해야 했다.

For Loop를 이용해서 구구단을 출력하는 코드

첫번째 for문에서 A값을 2부터 9까지 , 두번째 for문에서 B값을 1부터 9까지 돌리면서 AxB=C라는 문장을 출력하도록 함.

While문을 이용해서 구구단을 출력하는 코드

첫번째 While문에서 A<=9라는 조건을 달고 두번째 While문 b=0인상태에서 <=9가 될 때까지 AxB=C 라는 문장을 출력하게 함. 출력 후 증감연산자를 통해 B값을 늘려주고 B값이 두번째 While문을 탈출하면 A값을 하나 늘려서 다시 두번째 반복문을 실행함.

 

두 개를 비교해보면 사실 일반 코딩과 비슷한 느낌이다. 이중반복문을 이용해서 출력하게 된다.

While문 코드 맨 오른쪽 부분은 B++ // B와 add블록을 이용하여 B값 set 두가지 버전이 있는데

사실 코드로 적으면 B++ // B=B+1과 같다.

 

결과는

이렇게 나오게 되는데 다른 조원분이 하신 방법으로는 2단부터 9단까지 한번에 나오는게 아닌, 사용자가 버튼을 누르면 다음 구구단을 출력하도록 하는 방법도 있었다.

 

 

 

6. 열거형을 이용해 가위바위보 구현( )

오늘 진행한 과제 중 6번이 가장 어려웠다.

이 과제는 열거형 변수를 이용해서 랜덤함수로 값이 정해진 컴퓨터와 가위바위보를 하여 출력하는 게임을 만드는 것.

 

먼저 열거형(Enum) 변수란 관련 있는 상수들을 한데 모아놓는 것을 의미함.

ex) 게임 안의 "아이템"이라는 열거형 변수 안에 0번 슬롯에 "헬멧", 1번 슬롯에 "아머", 2번 슬롯에 "웨폰" 이런식으로 로직을 작성하게 되는데 슬롯의 갯수가 늘어날수록 이를 다 외워서 하드 코딩 할 순 없기에 열거형 변수를 사용할 수 있다.

 

컨텐츠 브라우저에서 우클릭>블루프린트>열거형 을 통해 열거형 변수를 만들 수 있고

이런식으로 기존변수에 변수형 지정이 가능하다.

 

이렇게 만든 변수는

이렇게 GET, SET도 가능하고 Switch on 노드를 통해 해당하는 값마다 원하는 로직을 구현할 수 있다.

 

이를 이용해서 가위바위보를 구현해보면

나는 이런식으로 구현했다.

먼저 1,2,3 버튼을 눌렀을 때 각 버튼마다 플레이어의 대답(가위,바위,보)을 선택하여 Player Enum에 저장하고 컴퓨터는 random integer를 통해 0,1,2중에 랜덤으로 정해지도록 하였다. 이후 to byte 노드와 byte to enum 노드를 통해 Com Enum에 저장한다.

 

이후 switch on 노드를 통해 플레이어가 주먹일때, 가위일때, 보일때 각각의 경우에 따라서 컴퓨터가 주먹일때, 가위일때, 보일때 경우를 다 다르게 짤수있다. 

이를 이용하여 이겼을 경우, 졌을 경우, 비겼을 경우를 나누어서 결과를 출력하도록 한다.

 

마지막쯤 출력노드인 Format Text에서 플레이어의 답, 컴퓨터의 답, 결과 이렇게 세개의 변수를 통해 최종적으로는

이렇게 출력이 되는걸 확인 할 수 있다.

 

 


마무리

언어로만 적어서 만들어가는게 아닌 직접 내가 연결하면서 사용하는 방식이라 즐겁게 공부할 수 있었던 것 같다.

텍스트 슈팅게임 추가 기능을 만들 때 같은 조원분이 총을 쏠 때의 명중률이나 크리티컬 등의 확률을 지정해서 추가 기능을 더 구현하셨는데 아이디어가 참 좋다고 생각했다. 이 외에도 과제를 완료했을 때쯤 다른 조원분들과 과제를 어떻게 해결하셨는지에 대해 대화를 좀 했었는데 나와 비슷하게 쓰신분도 있었고 완전 새롭게 쓰신분들도 있어서 이런 점이 참 신기하다.

'Unreal_Engine🎮 > TIL📖' 카테고리의 다른 글

[ Unreal Engine ] TIL 📖 ( 2-2 )  (0) 2024.12.17
[ Unreal Engine ] TIL 📖 ( 2-1 )  (0) 2024.12.17
[ Unreal Engine ] TIL 📖 (1)  (0) 2024.12.16
[ Unreal Engine ] TIL 📖 (사전캠프)  (0) 2024.12.11