Unreal 게임 개발 과정 TIL

Today's I Learning

본캠프 TIL

04.21 Unreal 본캠프) C언어 서식지정자와 리터럴/ FPS 캐릭터 움직임 구현

Sunlight__ 2026. 4. 21. 20:49

 

오늘 강의는 C언어 서식지정자와 리터럴에 대해 배웠다.

 

지난 강의에서 마저 하지 못했던 탈출 문자열에 대해 실습 먼저 하고 넘어가겠다.

 

Ex010503)개행하기

개행(New Line)을 사용하여 world를 아래로 내린 모습


Ex010504)탈출 문자열

탈출 문자열을 활용해서 여러 문장을 만들어 본 모습

 

6. 서식 지정자

 

 - 서식 지정자(Format Specifier) : pirntf() 함수 혹은 scanf() 함수와 같은 입출력 함수들과 함께 쓰여서 양식에 맞게 입출력 할 수 있게끔 도와주는 지정자이다. 

 문자열의 원하는 위치에 서식 지정자를 넣어서 사용한다.

 

 1) %d: decimal(10진수)의 약자

 2) %o: octal(8진수)의 약자. 

 3) %x: hexadecimal(16진수)의 약자. x는 소문자, X는 대문자로 대체된다,

 4) %u: unsigned의 약자. 양수로 대체된다.

 5) %c: character의 약자. 문자로 대체된다.

 6) %s: string의 약자. 문자열로 대체된다.

 7) %f: floating point의 약자. single precision.

 8) %lf: double precision floating point.

 

서식 지정자가 필요한 이유 :
 3245라는 숫자를 문자열에 편입시키기 위해서 printf(“Result: %d”, 3245)라고 적을 수 있다.
또한 서식 지정자를 활용하면 계산 결과도 얻어 낼 수 있다.
3245 * 2342의 계산 결과를 화면에 출력시키기 위해 printf(”Result: %d”, 3245 * 2342)라고도 적을 수 있다.
 즉, 복잡한 수식을 빠른 시간안에 계산하고 그 결과를 원하는 형식으로 보기 위해서이다.
(복잡한 소스코드를 작성할 때 디버깅 용도로 요긴하게 사용되기도 한다.)

 

Ex010601) 서식시정자

서식 지정자를 사용한 모습

 

printf() 함수 코드를 정확하고 쉽게 이해하는 방법 :

 뒤에서부터 해석하면 훨씬 쉬워진다.
결국 영어로 작성하기에, 어순이 우리나라와 다르다.
 printf(”%d”, 3245 * 2342); 라는 코드는 “3245 * 2342를 %d 형식으로 printf해라”라고 해석한다.
후에 배울 scanf()도 동일하게 뒤에서부터 해석하는게 좋다.

 

Ex010602) 정수 서식지정자

정수 서식지정자를 사용해 주석에 적힌 대로 출력된 모습

 

Ex010603) 실수 서식지정자

실수 서식지정자를 사용해 줗석에 적힌 대로 출력된 모습

 

7, 리터럴

 

 - 리터럴(Literal) : 소스코드에 적힌 값 그 자체를 뜻한다.

앞으로 저자가 “값”이라고 칭하는 것들은 “리터럴”의 의미를 지닌다고 생각하면 된다.

 

Ex010701) 리터럴

경고가 뜬 모습

 

 - 예제 Ex010701은 경고가 뜬다.

 : 경고(Warning)은 에러(Error)과 다르다. 에러가 뜨면 빌드는 실패되지만, 경고는 빌드시켜준다.

다만, 경고도 되도록 모두 잡고 가는 것이 국룰이다.

 

Ex010702) 리터럴 출력

리터럴을 출력시킨 모습

 

8. 자료형

 

 - 자료형의 필요성 : 컴퓨터는 계산기 + 저장장치이다.

입력한 모든 값은 결국 0과 1로 저장된다. 하지만 컴퓨터는 그 0과 1의 묶음들이 무엇을 의미하는지 전혀 알 수 없다.

 어디서부터 어디까지(크기)를 어떻게 해석해야하는지 알려줘야한다. 이 역할을 하는 것이 자료형이다.

 - 컴퓨터 공학에서의 크기 단위 : 컴퓨터 공학에서 가장 작은 크기 단위는 1 bit 이다. (이진법의 한 자리에 해당하는 크기)

8 bit = 1 byte / 1024 byte = 1 kb

 

 - 자료형(Type) [정수/실수]

자료형 크기 == 표현 가능한 수 서식 지정
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 ro %i
long 4 byte or 8 byte %ld
long long 8 byte, -(2^63) ~ (2^63) -1 %lld
float 4 byte. 유효 자리수 6~7자리. [부호 : 1 bit, 지수 : 8 bit, 가수 : 23 bit] %f
double[기본 실수 자료형] 8 byte. 유효 자리수 15~16자리. [부호 : 1 bit, 지수 : 11 bit, 가수 : 52 bit] %lf
long double 8 byte 이상. %Lf

 

Ex010801) 리터럴과 자료형

리터럵롸 자료형을 구분해서 출력한 모습

 

오늘 C 언어 강의는 이것으로 종료이다.

 

다음은 FPS 게임 만들기를 이어서 할 것이다.

저번 시간에 총을 적용해주기 까지 하였으니 오늘은 팔을 붙이고 움직 일 수 있게 할 것이다.

 

 - 팔 스켈레탈 메시가 없기 때문에 컨텐트 브라우저에 가서 추가해 준다.

 - Add > Add Feature or Content Pack > First Person(1인칭)을 추가해준다.

SK 메시가 있다.

 

 - FPS_Character에 팔을 적용시키기 위해 Mesh > Skeletal Mesh Asset > SK_Mannequin_Arms 선택

손과 총이 잘 들어와 있는 모습

 

 - 캐릭터를 레베에 배치한 후 Auto_Possess 에서 Player 0 으로 할당해주어 만든 캐릭터에 빙의를 설정해준다.

 - 다시 Mesh 클릭 후 Animation > Mode > Use Animaition Asset 으로 변경 > FP_Rifle_Idle 선택

총을 든 모션이 된다.

 

 - Location을 수정하여 적절한 위치에 손을 배치해 준다.

 - SK_Mannequin_Arms_Skeleton 을 열어서 Preview Animation > rifle 검색 > FP_Rifle_Idle 선택

 - hand_r 찾은 뒤 우클릭 > Add Socket

 - 생성된 hand_rSocket 우클릭 > Add Preview Asset > SK_M16_Scope 선택 후 적절하게 위치 조정

 

 - 정석적인 방법으로 컴포넌트에서 Gun을 Mesh의 자식으로 드래그 앤 드랍 한다.

적절한 위치에 손과 총이 들어간 모습

 

 - 총알이 발사되면 총구에 화염이 일어나야 하는데 그것을 Muzzle Flash라고 한다.

 - Gun에 Add > SceneComoponent 선택 > 이름을 Muzzle Flash로 변경 > 총구의 위치에 Muzzle Flash 위치 조정

 

 - 입력 매핑을 해주어 캐릭터의 움직임을 만들 것이다.

 - Input Mapping Context (IMC_FPS) 생성, Input Action (IA_Look, IA_Move) 생성

 - Value Type : Axis2D로 설정

IA_Look과 IA_Move 둘 다 설정해준다.

- 이벤트 그래프에서 노드 설정 해준다.

각각 움직임을 설정해준다.

 -  다만 이렇게 만든 노드들로는 바닥을 바라보며 전진키를 눌렀을 때 전진이 잘 되지 않으며,

 하늘을 바라보고 계단을 올라갈 수 없다.

 

 - 변수들을 미리 생성해준다.

변수명 타입 기본값 설명
Health Float 100.0 현재 체력
MaxHealth Float 100.0 최대 체력
CurrentAmmo Interger 30 현재 탄약 수
MaxAmmo Interger 30 최대 탄약 수
MaseDamage Float 20.0 한 발당 데미지
IsFiring Boolean false 발사 버튼 누름 상태
FireInterval Float 0.1 연사 간격(초)
CanFire Boolean true 발사 가능 여부(연사 제어)
DefaultFOV Float 90.0 일반 시야각
AimFOV Float 60.0 조준 시 좁아지는 시야각(시야 확대)
IsAiming Boolean false 조준 줌인지 여부

 

조준 시야각 설정이다.

 

 - 타임 라인을 활용해서 부드럽게 조준이 되게 설정해준다.

 - ABP_FPSCharacter을 만들어서 설정해준다.

 

속도가 0 이상일 때 Run, 속도가 0 이하일 때 Idle

 

여기까지 만든 후 테스트 해볼 것이다.

https://youtu.be/8pA1wXVEUww

직접 플레이 해본 영상

 

 

오늘로 2일차가 끝이 났는데 점점 난이도가 올라가는 것이 느껴졌다.

역시 특출나게 눈에 띄는 분들이 제법 있어서 조금 기죽게 되는 것 같았다. 그래도 열심히 해보자고 마음 먹었으니 열심히 할 것이다.