언리얼엔진/구현·실습

언리얼엔진 게임개발 3일차

write76465 2026. 2. 25. 21:36

오늘의 강의

 

언리얼엔진 블루프린트로 슈팅게임 만들기

 

1) 블루프린트를 위한 기본설정

 

나에게 꼭 필요한 설정법요약

 

사고쳤을때 돌아오는 법

 

Project Settings > Maps & Modes > Editor Startup Map, Game Default Map을 PlayGround로 지정.

내가 만든 레벨을 기본레벨로 지정하는 법

 

2) 블루프린트란?

 

간단하게 말하면 언리얼엔진에 존재하는 비주얼스크립팅. 코딩은 어려우니 이걸로라도 해봐라 느낌

 

블루프린트 창을 열면 만나는 첫 친구들

 

이벤트 함수: 어떤 사건(Event)이 발생하면 호출되는 함수.

  • BeginPlay : “게임 플레이의 시작”이라는 사건이 발생하면 호출되는 함수
  • Tick: “매 게임 프레임”마다 호출되는 함수

3) 블루프린트 연산자

 

기본적으로 c++에 있는 연산자들과 흡사하다.

연산자의 종류는 2일차 블로그에 있으니 패스

 

4) Branch 와 sequence

 

코딩의 if-else와 동일하다고 보면됌

 

0부터 정해진 번호까지 순차적으로 실행시켜줌

(그냥 묶어서 실행이라고 생각하면 편할듯)

가독성을 위해서 쓴다고 보면됨

 

5)슈팅게임 만들기

 

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

일단 3개의 보기에만 충실한 코드 

 

오류가 존재

오류 1. 클릭하면 총알이 0발이하(마이너스)가 되어도 계속 발사된다.

오류 2. 이미 탄창이 가득찼지만 계속해서 장전이 된다.

 

2가지의 오류를 잡은 코드

Branch를 이용해 총알이 0발보다 작아지면 Out of ammo...나오게 코딩

탄창도 똑같이 Branch를 이용해 풀탄창과 같은 수이면 Already full...나오게 출력

 

 

6) 총기 과열 기능 추가

 

총기온도(int) 변수 추가

30발이하는 Normal, 31~70발은 High, 71~은 Over로 세팅

 

총기 과열을 막을 단축키 추가

단축키 T로 설정 

총기온도가 0 이하로 내려가는것을 방지하기위한 Branch를 미리 세팅

 

7) 함수

중복되는 내용의 코드들을 묶어서 빠르고 가독하기쉽게 재사용 하는것

총기 과열코드가 반복되므로 온도가 높아지는것과 낮아지는것을 묶어서 구현

Inincrement 변수 만들어서 온도를 높이고 낮추고를 조절

 

 

적용시키면 단축키T와 Then0번의 코드가 함수로 set된걸 볼수있음(총기과열은 Inincrement에 +1, 낮추는 T에는 -1)

 

8) While Loop, For Loop

 

While Loop문 입력한값이 거짓이 될때까지 돌리는 반복문

For Loop문 예시에 따르면 1번 인덱스부터 7번인덱스까지 반복하는 반복문

 

9) Array와 For each Loop

 

Array 간단하게 설명하자면 방을 만드는 느낌

네모 9 개 array표시

Array변수의 방안에 저렇게 여러개를 넣을수있음(단, 자료형에 맞춰서 넣어야됌)

 

ForEach Loop

만든 Array의 안에 들어있는 입력값들을 차례로 출력하는 반복문

 

10) 열거형

 

정수형 상수에 이름을 부여해서 모아둔 것을 열거형이라고 함.

이렇게 만들어야 함

 

열거형 파일을 열면 나오는 모습 (총기과열 온도를 하나로 묶어서 열거함)

 

 

변수 추가하는 곳에서 열거형 선택, 내가 정해놓은 이름 검색하면 등록 가능

 

아까 총기과열 함수에서 있던 sring빼고 열거형으로 교체

가독성 좋아짐

컴퓨터기능 향상

 

11)구조체 만들기

 

구조체 파일 만드는법

 

구조체파일에 들어가면 나오는 모습 (하나 하나 변수 설정했던 총알,온도,총기상태, 총기이름 한번에 묶기)

 

변수에서 structure 선택 후 내가 정해놓은 구조체파일 이름 검색

변수에 추가 후에 Array로 타입 변경

 

그럼 내가 구조체에서 입력했던값들을 방안에 입력가능

 

12) 만든 구조체로 슈팅게임 업그레이드

1번을 누르면 라이플, 2번을 누르면 샷건, 3번을 누르면 피스톨로 교체됩니다.

격발하면 현재 무기의 총알만 소모하고, 과열 상태도 현재 무기만 과열됩니다.

 

과제 정답

 

코드를 보니 재장전하면 모두 30발로 재장전되게 통일 되어있는것을 볼수있음

하지만 라이플은 30발, 샷건은 10발, 권총은 50발임

그래서 각자 발수를 따로 지정해서 만들어줬음

 

나의 블루프린트

작동시켜보니 라이플 30, 샷건 10, 권총 50 정상작동

 

최종 코드 잘안보이지만 정상 작동함 

변경된 총기과열 함수

 

재장전에 있는 코드들이 복잡해서 고민하다가 재장전 함수를 따로 만들기로 생각함

 

 

먼저 MaxBullet이라는 Array변수를 만들어서 각각의 총의 총알수를 넣었다

 

 

0번이 라이플이고 1번이 샷건 2번이 피스톨이기때문에 그에 맞춰서 넣어주었다.

 

 

 

이런식으로 재장전 함수를 따로 생성

 

 

훨씬 간결해진 코드

 

13)과제 하며 느낀점

일단 구조체를 이해하지못했는데 직접 고뇌하며 만들다 보니 어느정도 이해할수있게되었다.

구조체를 분할해서 값을 넣어주는 곳에서 헤매게되었는데 강의에는 나오지않는 부분이라 어쩔수없이

정답지를 보며 유추해보았다. 하지만 그게 오히려 나에게는 더 성장할수있는 계기가 된것 같다.

 

두번째 강의 : c++강의

 

1)  if문의 종류와 차이

 

1. 단순 if문 중요

 

간단하게 설명하자면 

만약 (조건)이면 진행해라

 

// Main.c

#include <stdio.h>

int main(void)
{
int Num = 102;

if (Num < 102)  -> 만약 Num < 102이 참이면 밑의 명령어를 실행하라
{
printf("Num < 102");  -> 위의 조건문이 False이기 때문에 아무것도 출력되지않음
}

return 0;
}

 

2. if else문 중요

 

만약 (조건)이 참이면 실행하고 

(else)아니면 else안의 명령문을 실행해라

 

// Main.c

#include <stdio.h>

int main()
{
int Num = 102;

if (Num < 105) -> 이 조건이 참이면 밑에 출력해라
{
printf("Num < 105"); -> 참이므로 출력
}
else -> 조건이 참이아니면 출력해라
{
printf("105 <= Num"); -> 위 조건이 참이었으므로 출력안됨( Num이 106이상이었으면 이 문장 출력)
}

return 0;
}

3. else if else if 문 중요

 

// Main.c

#include <stdio.h>

int main()
{
int Num = 102;

if (Num < 105) -> 참이면 바로 밑
실행
{
printf("Num < 105"); -> 참이므로 출력
}
else if (Num < 110) -> 위 조건이 참이아니면 실행
{
printf("105 <= Num && Num < 110");
}
else -> else if 조건도 참이아니다? 그럼 실행
{
printf("110 <= Num");
}

return 0;
}

4.중첩if 문 중요

 

if문 안의 if문

처음 if문이 거짓이면 아무것도 출력안됌

참이라면 출력 후 다음 if문으로 넘어감

 

// Main.c

#include <stdio.h>

int main()
{
int Num = 102;

if (Num < 105) -> 참이므로 실행됌
{
  printf("Num < 105\n");

    if (102 < Num)
    {
             printf("102 < Num && Num < 105"); -> 거짓이므로 패스
     }
     else
     {
               printf("Num <= 102"); -> 참이므로 실행됌
      }
   }

return 0;
}

 

2) switch case 중요

 

지정된 값이 나온다면 그 값에 맞는 실행문을 출력

break 걸어줘야 흐르는거 방지

 

 

// Main.c

#include <stdio.h>

int main()
{
int Num = 101;

switch (Num)
{
case 100:
printf("Num == 100");
break;

case 101: -> Num이 101이므로 밑의 실행문 출력(고의로 break문을 걸지않아서 case 102까지 흐른 후 출력) 중요
case 102:
printf("Num == 101 || Num == 102");
break;

default: -> 아무 값도 안맞으면 도착하는 최종목적지
printf("default");
break;
}

return 0;
}

 

3) While문 중요

 

While문안의 조건이 거짓이 될때까지 돌아가는 반복문

 

// Main.c

#include <stdio.h>

int main(void)
{
int i = 1;

while (i < 5)
{
printf("%d ", i); -> i가 5미만일때까지 반복하기때문에 1 2 3 4 출력됌

++i;
}

return 0;
}

4)For문 중요

 

While문의 조건을 한문장으로 함축시켜놓은것

 

// Main.c

#include <stdio.h>

int main(void)
{
int i;

for (i = 1; i < 5; ++i)   -> i변수 지정, 조건문, i값 상승
{
printf("%d ", i); -> 1부터 5미만까지 i가 1씩 증가하므로 1 2 3 4 출력
}

return 0;
}

5) do While문

 

While문 전에 do가 온다면

While문의 조건과 상관없이 무조건 실행해야하는 반복문

 

 

6) 무한 반복문 break, continue

조건문 뒤에 break가 온다면 그 조건문을 부수고 바로 나오는것이고(break전의 조건문이 참이라는 전제)

continue가 온다면 뒤에 조건들을 무시하고 바로 다시 위로 올라와서 반복하는것이다(continue전의 조건문이 참이라는 전제)