본 캠프 TIL

26.04.22 TIL / C언어 1-9 ~ 2-3 / UE5 Day3

jh009 2026. 4. 22. 21:52

C언어 세션 3일차

1-9. 변수

변수(Variable) <-> 상수(Constant) [중요 샘플 코드]

 

자료형 변수명 = 값;

 

Ex010901) 자료형 변수명 = 값; [중요 샘플 코드]

변할 수 있는 수


unsigned 키워드와 signed 키워드

부호 없는 ,  부호 있는

서식 지정자: %u


오버플로우(Overflow)

자료형이 표현 가능한 수를 넘어서는 경우.

-128 ~ 127 까지 표현 가능한데 그 수치를 넘어갈 경우 반전돼서 나옴

 

ex)

  • -129 >> 127 
  • 132 >> -128


컴퓨터는 문자를 이해할 수 없음

소스코드를 컴파일러를 통해 이진패턴으로 만들었다는 걸 기억해야 됨


인코딩(Encoding) Vs. 디코딩(Decoding)

형태 A  → 형태 B 로 변환하는 것 (인코딩)

반대로 형태 B → 형태 A 로 변환하는 것 (디코딩)


1-10.ASCII

ASCII(American Standarded Code for Information Interchange) 아스키

문자 형태의 데이터와 숫자 형태의 데이터 사이의 인코딩 규약 중 하나.

 

아스키 코드 3개만 외우기

  • 문자 0 : 48 / 문자 2: 50 → 문자 0 부터 순서대로 올라감 (외우기 쉬움)
  • 문자 A: 65
  • 문자 a: 97

A 라고 적으면 65로 저장됨

A 를 %d 로 입력 하면 65

65 를 %c 로 입력하면 A


1-11. 입력 기초

scanf() 함수 [중요 샘플 코드]

키보드로부터 데이터를 입력 받을 수 있게끔 해주는 함수

Ex011101) scanf() 함수


2-1. 연산자와 피연산자, 산술 연산자, 복합 대입 연산자, 값식문

연산자(Operator) , 피연산자(Operand)

피연산자와 함께 사용되어서 계산 결과를 만들어 내는 기호

ex) 5 + 2 에서

5, 2 → 피연산자

+ → 연산자


연산자 우선순위(Operator Priority)와 결합법칙

덧셈과 곱셈이 뒤섞여 있는 식에서 묵시적으로 곱셈을 먼저 계산


산술 연산자의 종류

덧셈, 뺄셈, 곱셈, 나눗셈, 나머지(%)

 

ex)

나눗셈: 몫을 구하는 연산자

나머지 연산자: 나눗셈의 나머지 값을 구하는 연산자 


정수 피연산자와 실수 피연산자

int 자료형끼리의 나눗셈은 그 결과도 int.

 

ex)

컴퓨터는

5 / 2 = 0

5 / 2 = 2

같이 표현해버림

 

5.0f / 2.0f = 2.5f

실수로 써줘야 알아들음


Feed-back [중요 샘플 코드]

int s = 0;

s = s + 10; // s += 10 과 같음

현재 변수 = 이전 변수값 + 10;

 

다른 사칙연산도 피드백 코드 가능

// s = s + 10 

s -= 10

s %= 10

 

ex)

더보기

int CurrentPlayerExp = 20;

// 빨간달팽이(EXP 10) 사살!

CurrentPlayerExp = CurrentPlayerExp + MonsterExp;

현재 경험치 = EXP20

빨간달팽이 사살로 경험치가 추가로 10 + 가 되어야함

현재 경험치(20) = 현재 경험치(20) + 빨간달팽이를 잡고 얻는 경험치 (10) 


2-2. 증감 연산자, 논리 연산자, 비교 연산자

증감 연산자

증가/감소의 줄임말

 

단항의 피연산자를 가지는게 특징

ex) ++Num;

 

증감 연산자에는 전치 증감 연산자 , 후치 증감 연산자 가 있음

 

각각 피연산자의 앞 혹은 뒤에 붙음


전치/후치 의미

전치는 지금 당장,

후치는 다음 줄에 연산

 

ex)

++Num이라면 지금 당장 Num이 1 증가.

Num++이라면 다음 줄에 Num이 1 증가.

 

Ex020201) 전치/후치 증감 연산자

 


논리 연산자

C언어에서는 0은 거짓(false)

0 이외의 모든 값은 참(true)

 

-8 은? True. 0 이외의 모든 값은 참임

 

피연산자를 참 혹은 거짓으로 평가한 후에 논리 연산을 수행

 

계산된 결과값도 참 혹은 거짓

 

즉, 불대수(boolean)연산자


거짓에 준하는 값(falsy)

NULL , ‘\0’ , ...


논리 연산자의 종류

  • 논리 곱 연산자 (&&)
  • 논리 합 연산자 (||) → \ 랑 Shift 같이 누르면 나옴
  • 논리 반전 연산자 (!)

논리 연산자 꿀팁

“논리”라는 단어에 집중하기보다 곱 또는 합 단어에 집중하면 됨

 

논리 곱 연산자는 곱셈으로, 논리 합 연산자는 덧셈으로 치환해서 생각


관계 연산자 / 비교 연산자

피연산자 간의 관계(대소, 대등, …)를 판단하는 연산자. ex) 3 < 2, 4 != -1, 3 == 3, …


주의할 점 - 대등 연산자가 수학과 다르게 두 개 적어야함

등호도 두 개를 작성해야 대등 연산자 (==)

반대로 다르다는 (!=)


2-3. 형변환 연산자, 삼항 연산자, sizeof

삼항 연산자 해석이 어렵다면

ex) 4 < 5 ? 0 : 1;

첫번째 항이 참임 ?

참이면 두번째항 귀결

거짓이면 세번째항 귀결

 

위와 같은 식은 “4 보다 5가 더 크냐?” 라고 물어보는 것

참이라면 :(colon) 을 기준으로 앞에 값 (또는 식) 이 계산 결과가 나옴

거짓이라면 colon 뒤에 값 (또는 식) 이 계산 결과로 나옴


Blueprint FPS 슈팅 게임 개발 3일차

 

 

Line Trace & 데미지 시스템

 

핵심 3가지

  • 시작점: 어디서 쏠 건지 (예: 카메라 위치)
  • 끝점: 어디까지 쏠 건지 (예: 카메라 앞 10000cm → 100m),
  • 결과: 뭔가에 맞았는지, 맞았다면 뭐에 맞았는지

Inputs → IA_Fire 생성 → 설정 후 → 블루프린트 IA_Fire Started 에 연결

 

 

Line Trace By Channel

 

Player Camera Manager: 내 화면(카메라)을 관리하는 매니저

 

Return Value 

X 검색해서 곱하기 핀을 뽑기 → 아래 입력핀에 우클릭하고 To Float 로 변경

 

현재 내 화면이 상/하/좌/우 어디로 움직였든 그 위치에서 앞 방향을 알려주는데,

앞 방향인데 얼마나 앞 방향까지 라인을 그어줄지 정하기 위해서 X(곱하기)를 하는 것

 

곱하기 노드를 변수 Float 으로 변경 후 Range 4000 으로 변경 (나중에 변경할 때 찾기 쉬움)

 

True → print string “맞음” ,

False → print string “안 맞음”

설정 후 테스트

 

Hit Actor: 맞은 물체를 뜻함

print string으로 출력


이펙트, 사운드, 연발 사격

Muzzle Flash: 총의 총구에서 나오는 불꽃 이펙트  

Impact Effect: 총알이 벽, 바닥에 부딪힐 때 나오는 먼지/파편 이펙트

 

Fab 에서 다운

 

Rotation에서 Z축을 알맞게 회전 시키고 테스트

 

이미터 하나 하나 누르면서 Loop Behavior를 Once로 변경 (총 7개)

이펙트가 중첩되지 않고 한 번씩만 잘 호출하기 위함

 

Location Type에 Snap to Target, Including Scale을 선택

  • Keep Relative Offset → 붙인 컴포넌트 기준으로 위치 차이(오프셋)를 유지한 채 따라감
  • Keep World Position → 스폰된 월드 위치 그대로 고정, 따라가지 않음
  • Snap to Target, Keep World Scale → 타겟에 딱 붙되, 크기는 월드 기준 유지 (부모 스케일 무시)
  • Snap to Target, Including Scale → 타겟에 딱 붙고, 부모의 크기까지 따라감 (지금 선택한 것)

 

  • Viewport → MuzzlePoint를 선택하고 Scale을 0.5 로 변경 
  • 블루프린트 Spawn System Attached → VFX가 메모리에 쌓이지 않도록 Auto Destroy 체크

 

Spawn Emitter at Location 생성

Emitter Template → P_Concrete

Line Trace 의 Draw Debug 가 방해가 되니 끄기


총의 반동 주기

 

IA_Fire 이벤트 뒤에 노드가 너무 많기 때문에 모든 노드를 Fire라는 함수로 만들기

모두 선택 후 우클릭 → Collapse to Function

 

 

총 소리 나게 하기

 

볼륨 낮추기 → 0.3 = 30%

 

연발 사격 설정 


크로스헤어 & 탄약 표시 UI

 

팔레트에서 canvas 검색 후 드래그앤 드랍해서 배치

 

progress bar도 검색 후 배치 → 체력바

 

HP라고 이름 변경 

Is Variable선택 →  다른 캐릭터나 외부에서 HP값을 변경 할 수 있음

Progress 밑에 Percent는 1로 변경 / 1 == 100%

 

Text 검색 후 2개 canvas 안으로 배치

Text 2개 모두 선택 후 Anchors를 선택 하고 ctrl + shift 누르고 왼쪽 아래 위치를 클릭

  • ctrl + shift 를 눌러야 원하는 위치에 정확하게 배치가능
  • 텍스트 크기 64로 조정 및 이름 변경
  • Size to Content → 박스가 글자 크기에 맞게 자동으로 사이즈 변경

 

위젯(UI, HUD) 연결한다고 생각하면 됨

연결 후 테스트 

 

 

Anchors에서 ctrl + shift 누르고 중앙을 선택

Detail → Appearance → Image 선택하고 Anchor 이미지 선택

 

없다면...

컨텐츠 브라우저 오른쪽 Settings 버튼 → Show Engine Content 체크

 

Fire 최종 노드


Max Ammo 값을 현재 Current Ammo 로 세팅

나중에 Max Ammo 값만 변경하면 게임 시작 시 최초 Current Ammo값도 같이 변경하는 로직

 

현재 총알이 0발보다 큰지 검사합니다. true 일때(1발 이상 있다)만 뒤에 로직을 실행

 

PlayerHUD(위젯)에서 AmmoAmount변수 가지고 오고 마지막으로 Set Text해서 총알 수를 변경