블루프린트를 이용한 비주얼 스크립팅 (변수 | 논리 연산자 | 흐름 제어 | 구구단 | 텍스트 슈팅 게임)

김여울·2025년 5월 21일
0

내일배움캠프

목록 보기
3/111

📍 Live : 블루프린트를 이용한 비주얼 스크립팅

  • 블루프린트르 이용해 프로그래밍과 기본적인 개념 학습
  • 비주얼 프로그래밍 실습
  • 비주얼 스트립팅으로 간단한 게임 만들기

블루프린트란?

  • 언리얼 엔진에서 제공하는 비주얼 스크립팅 시스템으로 코드 없이 노드를 연결해 게임 로직을 구성할 수 있다. C++ 과 함께 사용 가능해서 비주얼 스크립트와 코드 혼합 개발이 가능하다.
  • 레벨마다 블루프린트를 하나씩 생성할 수 있어, 각 레벨에 맞는 블루프린트를 따로 관리할 수 있다.

블루프린트 기본 용어 정리

용어설명
Event (이벤트)특정 시점에 자동으로 실행되는 동작
Event BeginPlay게임이 시작될 때 한 번 실행되는 이벤트
Event Tick매 프레임마다 반복 실행되는 이벤트
Compile (컴파일)블루프린트나 C++ 코드를 검사하고 컴퓨터가 실행 가능한 상태로 변환
Variable (변수)데이터를 저장/관리하는 컨테이너 (예: 체력, 점수 등)
Node (노드)기능을 시각적으로 표현한 블록
Function (함수)반복적으로 사용하는 동작을 하나로 묶은 노드 집합
Blueprint Class블루프린트로 만든 오브젝트 템플릿 (예: 캐릭터, UI 등)
Actor월드에 배치할 수 있는 객체의 기본 클래스
Component (컴포넌트)액터에 붙이는 기능

변수

  • 데이터(정보)를 저장하고 관리하는 컨테이너
  • 정보가 어떤 타입인지 명시해줘야 한다

🌀 변수의 종류

타입설명
Boolean (부울)참(True) 또는 거짓(False) 두 가지 상태만 가짐
Byte (바이트)0~255 범위의 작은 정수
Integer (인티저)일반적인 정수. 약 -21억 ~ 21억 범위
Integer64 (int64)매우 큰 정수. Integer보다 64비트 크기
Float (플로트)실수형. 소수점을 가지는 숫자, 부동 소수점 (float)
Name (이름)불변 문자열. 주로 엔진 내부에서 빠르게 비교할 때 사용
String (스트링)일반 문자열. 예: 플레이어 이름, UI 등
Text (텍스트)다국어 지원용 문자열. 퀘스트 설명, 자막 등 지역화(Localization) 지원이 필요한 경우 사용
  • 숫자형 변수 크기
    • Integer64 > Integer/Float > Byte
  • 문자열 변수 차이
    • Name : 고정된 이름, 빠른 비교용
    • String : 사용자가 입력하는 일반 텍스트 (예) 닉네임
    • Text : 다국어를 지원해야하는 텍스트 (예) 퀘스트 설명
  • 변수를 갖고 오는 방법
    • Set: 변수에 값을 할당하는 것 (값을 넣기)
    • Get: 변수에 저장된 값을 가져오는 것 (값을 읽기)
  • 변수의 디폴트값 설정하기 : 변수 생성 후 컴파일

논리 연산자

연산자설명예시 및 특징
AND두 조건이 모두 참일 때만 결과가 True가 됩니다.A && B (둘 다 참이어야 True)
OR두 조건 중 하나라도 참이면 결과가 True가 됩니다.A
NOT조건 결과를 반대로 만듭니다.예: 5 < 4는 False → NOT → True 출력
XOR두 조건 중 하나만 참일 때 결과가 True가 됩니다.예1: 5 < 6 (True), 5 < 7 (True) → XOR → False (둘 다 참이라서)
예2: 거짓 → XOR → True (한쪽만 참)
참고: 실제로는 잘 안 쓰임

흐름제어

  • 흐름 제어 노드를 활용하면 조건을 나타낼 수 있다

    노드명설명동작 방식 및 특징
    Branch조건을 평가해서 참(True) 또는 거짓(False)에 따라 다른 노드를 실행조건식 연결 → 참/거짓에 따라 분기 실행
    Sequence여러 노드를 순차적으로 차례대로 실행Then 핀에 연결된 노드들을 순서대로 실행
    Flip Flop두 개의 흐름을 번갈아가며 실행첫 실행 시 A 흐름, 다음 실행 시 B 흐름 반복
    While Loop조건이 참일 때 계속 반복 실행조건이 거짓이 될 때까지 반복 → 조건 확인 후 반복 계속
    For Loop지정한 범위 내에서 반복 횟수를 미리 정해 실행시작 인덱스부터 끝 인덱스까지 순차적 반복 → 인덱스 값 사용 가능
    -- 연산자변수에서 1을 뺄 때 사용변수 값을 1 감소시키는 단축 연산자 (count-- 등)
  • 반복 작업이 필요할 때는 While 루프와 For 루프를 자주 사용한다

블루프린트를 이용해 구구단 구현하기

For Loop

📝 과제
While Loop

  • 왼쪽 외부 While Loop
    • 조건: A < 10 ( A 디폴트값을 2로 설정 ➡ 2~9 반복)
    • 매 루프마다 내부 While Loop 실행 후, A가 증가하는 구조
  • 오른쪽 내부 While Loop
    • 조건: B < 10 (B는 1~9까지 반복)
    • 내부 루프 돌면서 B 증가
  • B는 내부 루프 시작 시 1로 초기화 (SET B = 1) ➡ 매우 중요!
  • 내부 루프에서 곱셈 연산 후 출력 (Format Text + Print Text)
  • 내부 루프가 끝나면 외부 루프에서 A 증가(A++)
    ➡ A가 2단부터 9단까지, B는 각 단마다 1부터 9까지 반복

블루프린트를 이용한 게임 만들기 : 텍스트 슈팅 게임

👾 규칙

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

🐛 버그 수정

  • 30발 이상 총알을 발사하려고 하는 경우, 발사가 불가능하게
  • 알이 가득차 있는 경우, 재장전이 불가능하게

    ⚠️ R키마우스 클릭 이벤트는 사용자가 실제로 누를 때마다 실행되어야 하는 입력 이벤트라서, Event BeginPlay(게임 시작 시 한 번만 실행되는 이벤트)가 아닌 각각 별도의 입력 이벤트 노드로 처리

📝 과제

👾 게임 규칙 추가

  • 총알 피격 기능
    • 총알을 맞으면 피해를 입어야 합니다. ➡ 총 쏘기에서 데미지 적용까지 이어지는 이벤트
    • Hp와 Damage라는 노드를 생성하고, 관련 로직을 작성해 봅시다.
  • 체력 회복 기능
    • 총알 피격으로 입은 피해를 치료할 수 있어야 합니다.
    • Heal이라는 노드를 생성하고, 관련 로직을 작성해봅시다.

🛠️ Final Output

💭

처음에는 Heal 이벤트를 구현하며 HP의 최대값인 MaxHP를 100으로 설정하고, F키를 눌렀을 때 HP가 회복되도록 만들었다. 만약 HP가 이미 MaxHP라면 ‘HP Full’ 메시지가 출력되도록 해서 회복이 제한되는 부분도 처리할 수 있다.
반면 Damage 이벤트는 처음 어떻게 연결할지 감이 잡히지 않아 다른 수강생들의 예시를 참고했다. Fire 이벤트에 Damage 이벤트를 연결하여 총을 발사하면 플레이어나 적에게 데미지가 적용되는 흐름을 만들었다.

0개의 댓글