I. Blueprint - FPS 슈팅 게임 개발 세션 (1회차)
개요
본캠프 1일차 오전 파트 라이브 세션에서는 FPS 슈팅 게임 제작을 위한 프로젝트를 구성했다. 프로젝트 생성부터 콘텐츠 관리, 캐릭터 블루프린트 생성, 카메라와 무기 및 팔 메시를 추가하여 1인칭 시점을 구현하기 위한 기본 환경을 구축하였다. 아직 게임의 기능을 구현하는 단계는 아니었지만, 앞으로 다양한 기능을 추가하기 위한 기본 구조를 만드는 과정이었다.
구현 과정
먼저 FPS 프로젝트를 생성한 뒤 새로운 레벨을 만들고, 콘텐츠 브라우저에서 폴더를 정리하여 프로젝트를 관리하기 쉬운 구조로 구성하였다.
이후 Fab에서 총기 에셋을 프로젝트에 추가하고, Character 클래스를 부모로 하는 블루프린트를 생성하였다. 1인칭 시점을 구현하기 위해 Camera Component를 추가하고, 카메라의 자식 컴포넌트로 Skeletal Mesh를 배치하였다. 이렇게 구성하면 카메라가 움직일 때 총기도 함께 움직여 플레이어의 시점과 자연스럽게 일치하게 된다.
총기 Skeletal Mesh에는 Fab에서 가져온 총기 Skeletal Mesh(SK)를 적용하여 화면에 총기가 보이도록 설정하였다.
또한, 콘텐츠 브라우저의 Add 기능을 이용해 First Person Blueprint Pack을 추가하였다. 이 팩에 포함된 1인칭 팔 Skeletal Mesh를 캐릭터의 Mesh 컴포넌트에 적용하여 플레이어 시점에서 팔이 보이도록 구성하였다. FPS 게임에서는 일반 캐릭터 모델 대신 1인칭 전용 팔 메시를 사용하는 것이 일반적이며, 이를 통해 보다 자연스러운 시점을 구현할 수 있었다.


후기
오늘은 본격적인 게임 기능을 구현하기보다는 FPS 게임 개발을 위한 프로젝트의 기본 구조를 구성하는 시간이었다. 처음에는 단순히 에셋을 추가하고 배치하는 작업처럼 느껴졌지만, 카메라와 총기, 팔 메시의 부모-자식 관계를 적절히 설정하는 것이 이후의 무기 애니메이션과 플레이어 시점 구현에 중요한 기반이 된다는 것을 이해할 수 있었다.
또한, 프로젝트 초기에 폴더를 체계적으로 관리하는 습관이 이후 개발 과정에서 에셋을 찾거나 관리하는 데 큰 도움이 된다는 점도 함께 배울 수 있었다.
II. C언어 세션 (1회차)
개요
본캠프 오후 파트의 첫 C언어 라이브 세션에서는 프로그래밍의 기본 개념과 C언어의 기초 문법을 학습하였다. 코딩이 실제로 컴퓨터에서 실행되는 과정과 저수준 언어와 고수준 언어의 차이, 컴파일 과정 등을 이해한 뒤, C 프로그램의 시작점인 main() 함수와 출력 함수인 printf()를 사용해 간단한 프로그램을 작성하였다. 또한 리터럴, 자료형, 변수의 개념을 배우며 데이터를 저장하고 활용하는 기본적인 방법을 익혔다.
학습 내용
먼저 프로그래밍이 컴퓨터에게 명령을 전달하는 과정이라는 점을 이해하고, 사람이 이해하기 쉬운 고수준 언어(High-Level Language)와 컴퓨터가 직접 이해하는 저수준 언어(Low-Level Language)의 차이를 학습하였다. 또한 작성한 소스 코드가 컴파일러를 거쳐 실행 파일로 변환되는 빌드 프로세스와 컴파일 과정에 대해 알아보았다.
*고수준 언어와 저수준 언어의 사이에 어셈블리어가 있다.

이후 C언어 프로그램의 시작점인 main() 함수와 화면에 문자열을 출력하는 printf() 함수의 사용법을 실습하였다. 출력 시에는 %d, %f, %c, %s와 같은 서식 지정자를 사용하여 자료형에 맞는 값을 출력하는 방법을 익혔다.
#include <stdio.h>
int main(void)
{
printf("Hello World!");
return 0;
}
| 종류 | 설명 |
| %d | decimal의 약자, 10진수로 대체됨 |
| %o | octal의 약자, 8진수로 대체됨 ex) 9(10) <-> 11(8) |
| %x | hexadecimal의 약자, x는 소문자, X는 대문자로 대체됨 ex) 17(10) <-> 11(16) |
| %u | unsigned의 약자, 양수로 대체됨 |
| %c | character의 약자, 문자로 대체됨 |
| %s | string의 약자, 문자열로 대체됨 |
| %f | floating point의 약자, 4byte 메모리 사용 |
| %lf | double precision floating point의 약자, 8byte 메모리 사용 |
또한 리터럴과 변수의 차이를 학습하였다. 리터럴은 코드에 직접 작성하는 고정된 값이며, 변수는 데이터를 저장하기 위한 공간이라는 점을 이해하였다. 변수를 사용하기 위해서는 먼저 자료형을 지정하여 선언해야 하며, int, float, char 등 다양한 자료형의 특징과 저장 가능한 데이터의 종류를 함께 학습하였다.
#include <stdio.h>
int main(void)
{
int a = 10;
float b = 3.14;
char c = 'd';
printf("int is %d, float is %f, char is %c", a, b, c);
return 0;
}
| 자료형 | 크기 == 표현 가능한 수 | 서식 지정자 |
| char | 1 byte. -(2^7) ~ (2^7) - 1 [-128 ~ 127] |
%c or %hhd |
| short int | 2 byte. -(2^15) ~ (2^15) - 1 [-32768 ~ 32767] |
%hd |
| int [기본 정수 자료형] |
4 byte. -(2^31) ~ (2^31) - 1 [-2147483648 ~ 2147483647] |
%d or %i |
| long | 4 byte or 8 byte. | %ld |
| long long | 8 byte. -(2^63) ~ (2^63) - 1 | %lld |
| float | 4 byte. 유효 자리수 6~7자리. [부호: 1bit, 지수: 8bit, 가수: 23bit] |
%f |
| double [기본 실수 자료형] |
8 byte. 유효 자리수 15~16자리. [부호: 1bit, 지수: 11bit, 가수: 52bit] |
%lf |
| long double | 8 byte 이상. | %Lf |
후기
오늘은 실제 기능을 구현하기보다는 C언어의 기본 개념을 이해하는 시간이었지만, 앞으로 C++과 언리얼 엔진을 학습하기 위한 중요한 기초를 다질 수 있었다. 특히 소스 코드가 컴파일 과정을 거쳐 실행 파일이 되는 과정을 이해하면서, 지금까지 블루프린트에서 구현했던 기능들도 결국에는 이러한 과정을 거쳐 실행된다는 점을 알게 되었다.
또한 변수와 자료형은 이후 모든 프로그래밍에서 반복적으로 사용되는 핵심 개념인 만큼, 단순히 문법을 암기하기보다 각각의 역할과 사용 목적을 이해하는 것이 중요하다는 점을 느꼈다. 앞으로 C++를 배우면서 오늘 학습한 개념들이 어떻게 확장되는지 함께 연결해 나가고 싶다.
'언리얼 엔진 > TIL' 카테고리의 다른 글
| TIL - 본캠프 3일차 (0) | 2026.06.30 |
|---|---|
| TIL - 본캠프 2일차 (0) | 2026.06.29 |
| TIL - 베이스캠프 12일차 (0) | 2026.06.24 |
| TIL - 베이스캠프 11일차 (0) | 2026.06.22 |
| TIL - 베이스캠프 10일차 (0) | 2026.06.19 |