안녕하세요! 오늘은 오전 Unreal 강의에서 Blueprint를 이용해 캐릭터 이동 및 카메라 회전을 구현하였습니다.
우선 캐릭터 이동과 카메라 회전을 구현하기 전, 지난 시간에 설정하였던 1인칭 팔에 애니메이션을 설정해주고 총의 위치를 팔과 맞도록 조정을 진행하였습니다.
1인칭 팔에 애니메이션을 설정하는 것은


그림과 같이 Mesh (CharacterMesh0)의 Details에서 Animation 칸에 Anim to Play를 FP_Rifle_Idle로 변경하여 설정해주었습니다.

그 후 Mesh에서 Skeletal Mesh Asset의 SK_Mannequin_Arms 이미지를 더블 클릭해 SK_Mannequin_Arms 창을 열어주고 Preview Animation 버튼을 눌러 FP_Rifle_Idle을 선택해줍니다.
그리고 Skeleton Tree에서 hand_r을 찾아준 후, Add Socket을 통해 소켓을 만들어주고 소켓의 이름을 hand_rSocket으로 정해주었습니다.

Add Preview Asset 버튼을 통해 SM_M16_Scope를 불러와주고 팔과 위치가 맞도록 조정해줍니다.
이렇게 팔의 애니메이션 설정과 총 위치 조정이 끝났습니다.
다음으로 캐릭터 이동 및 카메라 조종을 구현하였습니다.
베이스캠프를 진행할 때와 같은 부분도 있고 다른 부분도 있어서 베이스캠프 때, 정리했던 내용도 URL로 올려두겠습니다.
https://hiroaki9902.tistory.com/3
[내배캠] 3일차 밀린 진도 따라가기(2)
지난 시간에 이어서 오늘도 출석 못한 날들의 진도를 따라가기 위한 시간을 가졌습니다. 먼저 게임 엔진을 사용하여 게임을 개발하는 이유는게임에서 다루는 요소(그래픽, 사운드, 물리 연산,
hiroaki9902.tistory.com
일단 베이스 캠프 때와 마찬가지로 Content 폴더 안에 Inputs 폴더를 만들어준 후, Input Mapping Context 파일과 Input Action 파일을 마우스 우클릭을 하여 만들어줍니다.

Input Mapping Context 파일은 IMC_FPS로 만들어주었고, Input Action 파일은 각각 IA_Move, IA_Look, IA_Aim으로 만들어주었습니다.

IA_Move와 IA_Look을 더블 클릭 하여 열어준 후, 두 파일 모두 Value Type을 Axis 2D (Vector 2D)로 설정해주었습니다.
IMC_FPS를 더블 클릭 하여 열어준 후, Mapping탭에 + 버튼을 눌러 IA_Move와 IA_Look을 선택해주고 ▼(아래 화살표)버튼을 눌러 각각 IA_Move에는 W, S, A, D를 선택하고 IA_Look에는 Mouse XY 2D-Axis를 선택해주었습니다.
그 후, W 버튼을 누르면 Y축으로 이동을 해야하고 S 버튼을 누르면 W 버튼과 반대로 이동, D 버튼을 누르면 X축으로 이동, 마지막으로 A 버튼을 누르면 D 버튼과 반대로 이동해야 되므로 현재 값을 주면 어떤 값이 작동하는지 확인해보았습니다.
결과 현재는 어떤 버튼을 누르더라도 X값이 1로 작동하고 있는 상황이여서 나머지 버튼에서 알맞는 축으로 값이 작용할 수 있도록 변경 하였습니다.

X축으로 1 값을 작용하면 오른 쪽으로 이동하므로 D 버튼 값은 그대로 놔두고 A 버튼의 값은 D 버튼의 값을 반전하면 왼 쪽으로 이동하게 되므로 A 버튼의 Modifiers에 + 버튼을 누른 후, Negate 옵션을 추가 해주었습니다.
그리고 W 버튼과 S 버튼에는 Y축으로 값이 작용해야 되므로 W 버튼과 S 버튼의 Modifiers에 Swizzle Input Axis Values 옵션을 넣어 XYZ로 작동하는 방식을 YXZ로 변경해주어 W 버튼과 S 버튼을 누를 시, Y축에 값이 적용되게 바꿔주었고 S 버튼에는 추가로 W 버튼과 반대로 값이 작용하도록 Negate 옵션을 추가해주었습니다.

먼저 Event BeginPlay에서 Add Mapping Context를 연결해주고 Get Player Controller와 Enhanced Input Local Player Subsystem을 연달아 연결, 마지막 Add Mapping Context와 Enhanced Input Local Player Subsystem을 연결해줄 때는 Target에 연결해주었습니다.
** 그리고 Add Mapping Context에 Mapping Context에 IMC_FPS를 선택해주었습니다. **
처음 구현할 때 Mapping Context를 선택하지 않아 입력에 캐릭터가 작동하지 않아 조원분들의 도움으로 문제점을 찾았습니다ㅠㅠ
** Enhanced Input Local Player Subsystem 노드는 Subsystem을 통해 player의 입력값을 받아오는 노드로 밑에 만들어질 Blueprint에서 적용된 값을 가지고 오는 노드 정도로 이해하였습니다. **

두 번째로 Blueprint에 마우스 우클릭을 하여 IA_Move를 검색한 후 선택하면 EnhancedInputAction IA_Move가 생성하고 Break Vector 2D와 Get Actor Forward Vector, Add Movement Input을 생성해준 뒤, Get Actor Forward Vector를 Add Movement Input의 World Direction에 연결 Break Vector 2D의 in Vec을 EnhancedInputAction IA_Move의 Action Value와 연결, Y 값을 Scale Value에 연결해주고 X 값을 Add Movement Input 노드를 하나 더 생성하여 마찬가지로 Scale Value와 연결, Get Actor Right Vector노드를 생성하여 두 번째 Add Movement Input의 World Direction과 연결해줍니다.
** Get Actor Forward Vector는 현재 액터(물체)에 전방으로 적용하는 Vector값을 받아오는 노드 이고
Get Actor Right Vector는 현재 액터(물체)에 오른 쪽으로 적용하는 Vector값을 받아오는 노드 입니다. **

마지막으로 마우스 이동을 통한 캐릭터 카메라 조종은 IA_Look을 우클릭 하여 검색한 후, EnhancedInputAction IA_Look을 생성하고 Action Value에는 Move와 마찬가지로 Break Vector 2D의 in Vec을 연결 Triggered에는 병렬로 Add Controller Pitch Input과 Add Controller Yaw Input을 연결해주었습니다.
** 오늘 Pitch, Roll, Yaw를 외우는 방법을 튜터님께서 알려주셨는데 너무 재미있어서 여기에도 적어두겠습니다.**
Pitch(피치)는 피치볼 할래? => ㅇㅇ(끄덕끄덕) => 상하 회전
Roll(롤)은 너 롤 잘해? => 좌우로 갸웃둥..(FPS게임의 QEQE) => 측면 상하 회전
Yaw(요)는 공부할래요? => 아니요..(절레절레) => 좌우 회전
이런 느낌으로 알려주시드라구요! 혹시 회전 명칭에 대해 확실하게 기억하고 싶으시면 이 방법 좋은 것 같습니다ㅎㅎ
이렇게 캐릭터의 이동과 카메라 조종을 구현하였고 추가로 IA_Aim을 만들어 캐릭터의 줌인, 줌아웃 기능을 준비단계 까지만 구현하였는데 설명은 안하고 이미지로만 첨부해두겠습니다.

일단 이렇게 본 과정 2일차 Unreal Blueprint 강의가 끝났습니다.
아직까지는 따라가기 어렵지 않고 이론보다 실습 위주의 강의로 진행되고 있어 잘 따라가고 있습니다!
앞으로도 힘내서 열심히 해보겠습니다!
다음으로는 오후의 C언어 강의인데요.
오늘은 연산자, 조건문, 반복문에 대해서 배웠습니다.
우선 연산자 입니다.
연산자란 피연산자와 함께 사용되어서 계산 결과를 만들어내는 기호입니다.
산술 연산자
우리가 흔히 아는 +(더하기), -(빼기), *(곱하기), /(나누기)가 산술 연산자이고 여기에 %(나머지)까지 산술 연산자라고 불립니다.
복합 대입 연산자
산술 연산자와 대입 연산자가 합쳐진 연산자로 +=(곱하기), -=(빼기), *=(곱하기), /=(나누기), %=(나머지), 등이 복합 대입 연산자 입니다.
ex) int A = 2; A += 5; 라고 한다면 A의 값 2에 5를 더한 값을 A에 대입하라는 뜻이 됩니다. 즉, A의 값은 7이 됩니다.
증감 연산자
변수의 값에 1을 더하거나 빼는 연산자로 증가 연산자 ++와 감소 연산자 --로 이루어져 있습니다.
증감 연산자가 변수의 앞에 쓰이면 전치 증감 연산자가 되고 변수 뒤에 쓰이면 후치 증감 연산자가 됩니다.
전치 연산은 값이 실행되기 전에 증감 연산을 실행하는 연산이고 후치 연산은 값이 실행된 후에 증감 연산을 실행하는 연산입니다.
ex) int A = 2; printf(++A); 라고 한다면 화면에 출력될 때, A의 값은 1이 증가된 3이 출력됩나다.
이어서 printf(A++); 를 실행한다고 한다면 3이 출력된 후, 1을 프로그램 종료 전 A의 값은 4가 됩니다.
논리 연산자
논리 곱 &&(AND)연산자, 논리 합 ||(OR)연산자, 논리 반전 !(NOT)연산자, 등이 있습니다.
논리 곱(&&) 연산자는 두 피연산자가 모두 참(True)일 경우에만 참(True)을 반환합니다.
논리 합(||) 연산자는 두 피연산자 중 한 연산자이상 참(True)일 경우, 참(True)을 반환합니다.
논리 반전(!) 연산자는 참(True)일 경우에 거짓(False), 거짓(False)일 경우에 참(True)을 반환합니다.
비교 연산자(관계 연산자)
흔히 대소 비교를 할 때 많이 접하는 연산자로 <, >, ==, !=, <=, >=, 등이 있습니다.
ex) A > B 는 "A는 B보다 크다."를 의미하고 A == B 는 "A는 B와 같다."를 의미하며 A != B 는 "A는 B와 같지 않다."를 의미합니다.
>= 등호가 붙으면 "크거나 같다."의 의미를 갖습니다.
형변환
변수의 자료형을 변환해주는 역할을 합니다.
명시적 형변환이라고 부르기도 합니다.
ex) int A = 5; float B = 2.0; 두 변수의 값을 더하는 경우 같을 때 사용합니다.
int C = A + (int)B; 와 같이 형변환하여 결과를 int 변수 C에 대입할 수 있습니다.
다음으로는 조건문에 대해 배웠습니다.
단순 if문
단순 if문이란 if문만 사용된 경우를 뜻합니다.
기본 형태는 if(조건식) {내용} 의 형태를 갖춥니다.
ex)
int A = 2;
if(A > 0)
{
printf("변수 A는 양의 정수 입니다.");
}
실행 결과 값
변수 A는 양의 정수 입니다.
위와 같이 조건식에 조건에 부합한 경우 밑에 구문을 실행하는 조건문 입니다.
if-else문
if문 다음에 else문을 추가한 조건문 입니다.
기본 형태는 if(조건식) {내용} else {내용} 의 형태를 갖춥니다.
ex)
unsigned int A = 5;
if (A % 2 == 0)
{
printf("짝수 입니다.");
}
else
{
printf("홀수 입니다.");
}
실행 결과 값
홀수 입니다.
위와 같이 if문에 부합하지 않을 경우, 실행되는 else문을 추가하여 else문의 구문을 실행되는 조건문 입니다.
** else문은 if문 없이 사용할 수 없습니다.**
if-else if-else문
if-else문에 else if문을 추가한 조건문 입니다.
기본 형태는 if(조건식){내용} else if(조건식){내용} else{내용} 의 형태를 갖춥니다.
ex)
int A = -2;
if (A > 0)
{
printf("양의 정수 입니다.");
}
else if (A < 0)
{
printf("음의 정수 입니다.");
}
else
{
printf("0 입니다.");
}
실행 결과 값
음의 정수 입니다.
위와 같이 if문과 else문 사이에 추가적인 조건을 추가해서 실행해야 할 경우 사용되는 조건문 입니다.
** else문과 마찬가지로 if문 없이는 사용할 수 없습니다.**
추가적으로 if-else if-else문과 단순 if문의 차이
ex)
if (조건식1) {내용}
if (조건식2) {내용}
if (조건식3) {내용}
과
if (조건문1) {내용}
else if (조건문2) {내용}
else {내용}
의 차이는 단순 if문의 나열은 일단 모든 if문의 조건식을 순차적으로 확인하면서 조건에만 부합하면 해당 if문을 실행합니다.
if-else if-else문의 경우, if문과 else if문, else문을 순차적으로 확인하면서 조건에 부합하면 이후 else if문과 else문을 실행하지 않고 조건문을 탈출합니다.
**단순 if문의 경우, 각각의 if문이 별개의 조건문이기 때문에 서로의 상관관계가 없습니다.**
중첩 if문
if문 안에 if문을 넣은 형태의 조건문 입니다.
ex)
int A = -5;
if (A > 0)
{
if (A % 2 == 0)
{
printf("양의 정수이고 짝수 입니다.");
}
else
{
printf("양의 정수이고 홀수 입니다.");
}
}
else if (A < 0)
{
A *= -1;
if (A % 2 == 0)
{
printf("음의 정수이고 짝수 입니다.");
}
else
{
printf("음의 정수이고 홀수 입니다.");
}
}
else
{
printf("0 입니다.");
}
위와 같이 if문 안에 if문을 넣는 경우 중첩 if문이라고 부릅니다.
switch-case문
switch문에서 입력받은 값을 case문의 값과 비교하여 같을 경우 실행하는 조건문입니다.
기본 형태는 switch (입력 값) { case 비교 값1: 내용; break; case 비교 값2: 내용; break; ... default: 내용; break; } 의 형태를 갖춥니다.
ex)
int Num = 101;
switch (Num)
{
case 100:
printf("Num == 100");
break;
case 101:
case 102:
printf("Num == 101 || Num == 102");
break;
default:
printf("default");
break;
}
위와 같이 switch문에서 Num값을 입력 해주었고 case문을 돌면서 값을 비교해 맞는 값이 나오면 그 case 이후의 구문을 실행하는 조건문 입니다.
**break;를 사용하지 않으면 위 예시와 같이 다음 case문까지 순차적으로 실행하므로 조건에 맞는 구문만 실행하길 원하는 경우, 꼭 break;를 사용해야 합니다.**
마지막으로 반복문에 대해 배웠습니다.
while문
while문은 조건에 부합하면 부합하지 않을 때까지 while문 안의 구문을 계속해서 반복하는 반복문 입니다.
기본 형태는 while (조건식) {내용} 의 형태를 갖춥니다.
ex)
unsigned int A = 0;
while (A < 10)
{
printf( "%d ", ++A);
printf("\n");
}
실행 결과 값
1
2
3
4
5
6
7
8
9
10
위와 같이 A의 값을 확인하고 while문 안으로 들어와서 A값을 1 증가시킨 후 출력하고 줄 마침되어 해당 결과 값이 나오는 것을 확인할 수 있습니다.
for문
for문은 초기식, 조건식, 증감식을 입력 값으로 받아 조건이 부합하지 않을 때까지 for문 안의 구문을 반복하는 반복문 입니다.
기본 형태는 for (초기식; 조건식; 증감식) {내용} 의 형태를 갖춥니다.
ex)
int i;
for (i = 1; i < 5; ++i)
{
printf("%d ", i);
printf("\n");
}
실행 결과 값
1
2
3
4
위와 같이 전위 증가 연산자 ++를 사용하였으므로 for문의 조건식을 확인하기 전에 변수 i의 값이 증가하고 해당 결과 값이 나오는 것을 확인할 수 있습니다.
do-while문
do-while문은 while 반복문을 시작하기 전에 꼭 do문 안의 구문을 실행하고 while문을 시작하는 반복문 입니다.
기본 형태는 do {내용} while (조건식); 의 형태를 갖춥니다.
ex)
int A = 0;
do
{
A++;
printf("%d", A);
printf("\n");
}
while (A < 5);
실행 결과 값
1
2
3
4
5
위와 같이 while문의 조건식을 검사하기 전에 do문을 한번 통과하는 반복문 입니다.
break문과 continue문
break문은 구문에서 탈출할 때 사용되고 continue문은 반복문에서 이번 회차를 건너 뛰고 다음 회차를 진행할 때 사용됩니다.
ex)
int i = 0;
while (i < 6)
{
if (i % 2 == 1)
{
++i;
continue;
}
printf("%d", i);
printf("\n");
++i;
}
실행 결과 값
0
2
4
위와 같이 i의 값이 홀수일 때는 if문의 조건식에 부합하여 i를 1증가하고 해당 회차 while을 건너 뛰므로 결과 값이 0, 2, 4가 나옵니다.
이전에 조건문과 반복문에 대해 정리한 글이 있어 URL을 첨부 해두겠습니다.
https://blog.naver.com/hiroaki9902/223720037614
C++ 프로그래밍 (3일차)
조건문(Conditional Statement) 조건문(Conditional Statement)이란 조건이 참일 경우, 실행되는 구문...
blog.naver.com
오늘은 여기까지 학습하였습니다.
연산자와 조건문, 반복문까지 굉장히 알찬 기초 C언어 시간이였음을 글을 작성하면서 느꼈습니다!
내일도 힘내서 공부하겠습니다!
'[내일배움캠프] 본 과정 학습내용' 카테고리의 다른 글
| [내배캠] 5일차 Unreal Blueprint 내용 정리(2) 및 7일차 C++ 학습 내용 정리 (0) | 2026.07.06 |
|---|---|
| [내배캠] 5일차 Unreal Blueprint 내용 정리(1) (0) | 2026.07.03 |
| [내배캠] 4일차 Unreal Blueprint로 적 구현과 C언어 기초 (0) | 2026.07.01 |
| [내배캠] 3일차 Unreal Blueprint로 총 기능 구현과 C언어 기초 (0) | 2026.06.30 |
| [내배캠] 1일차 학습 내용 정리 (0) | 2026.06.26 |