TIL(12)

이채원·2026년 6월 29일

TIL

목록 보기
12/77

라이브 세션 : CH1 Unreal Blueprint 2회차

BP_Character 설정하기
컴포넌트에서 BP_Character 누르고 auto possess 검색 후 player0 설정

메쉬 클릭하고 Animation에서 Animation Mode를 Use Animation Asset으로 설정하고 Asset에 FP_Rifle_Idle 설정하기

Rotation 모두 0으로 설정

메쉬 더블클릭 하면 이 창이 뜸(Skeleton Mesh Asset에 지정했던 팔 더블클릭)

preview Animation에 FP_Rifle_Idle 설정(총 잡는 자세 설정 완료)

왼쪽 창에서 hand_r에서 우클릭 후 Add Socket 누르기 -> 소켓 우클릭 하고 Add Preview Asset 누르고 SK_M16_Scope 지정 -> 오른쪽 디테일에 Locatoin이랑 Rotation 설정

  • 각각 (X=-28.301513, Y=-1.657112, Z=6.000844), (Pitch=-31.228763, Yaw=-81.553563, Roll=-5.200780)

다시 BP_Charater로 돌아와서
Construction Script 더블클릭

Gun이랑 Mesh 왼쪽에서 끌어오기 후 Attach Component to Component 노드 생성 -> Target은 Gun, Parent는 Mesh 연결하고 소켓 네임에 설정했던 hand_rSocket 지정 -> 밑에 3개는 Snap to Target으로 바꾸기, 마지막 체크 표시

다시 BP_Charater로 돌아와서 Gun을 Mesh 안에 넣기 -> Construction Script에 만들었던 노드들 초기화

Gun 클릭하고 디테일 패널에서 Parent Socket에 hand_rSocket 지정하고 Location과 Rotation 초기화

Gun 하위에 +Add 눌러서 Scene 추가하기 (이름은 MuzzlePoint)

Mesh 눌러서 Animation에 Advanced 하위 펼치기 Pause Anims 누르기

MuzzlePoint 위치 조정(반짝반짝 나오는 거)

변수 만들기(각각 기본값 100, 100, 30, 30, 20, False, 0.15, True)

  • Health(현재 체력), MaxHealth(최대 체력), CurrentAmmo(현재 탄약 수), MaxAmmo(최대 탄약 수), BaseDamage(한 발당 데미지), IsFiring(발사 버튼 누름 상태), Fireinterval(연사 간격 (초)), CanFire(발사 가능 여부 (연사 제어)) 총 8개

팁! Ctrl + D로 변수 복제 가능

입력 매핑 : 키보드/마우스 버튼을 누르면 게임에서 어떤 동작을 할지 연결해주는 것. "W키 → 앞으로 이동"처럼 입력과 동작을 이어주는 설정
IMC : 입력 매핑들을 하나로 묶어놓은 묶음. "FPS 조작할 때는 이 묶음을 써라"처럼 상황별 입력 세트를 통째로 관리. 걸어다닐 때 IMC, 차량 탈 때 IMC를 따로 만들 수 있음

Content 폴더에 Inputs 폴더 생성하고 Input Mapping Context(IMC_FPS), Input Action 2개(IA_Look, IA_Move) 총 3개 생성하기 -> 그리고 IA_Look, IA_Move는 세팅 들어가서 Value Type을 2D(X,Y)로 지정


<IMC_FPS 설정>
Mapping에서 +누르고 IA_Look, IA_Move 불러오는데 주의사항 : /Game/Inputs에 저장되어있는 거 불러오기

BP_Charater로 돌아가서 Event Graph에 IA_Move 노드 꺼내기(위치 조심), Event BeginPlay, Get Player Controller, EnhancedInputLocalPlayerSubsystem, Add Mapping Context 노드 꺼내기(사진처럼 연결하고 Mapping Context에 만들었던 IMC_FPS 연결)

Negate = 부정값
Swizzle Input Axis Values = 기본 출력값은 x인데 yxz로 변경해주는 옵션
IA_Move에 값 설정하기

BP_Charater의 Event Graph 노드 설정

(노드 합치기 단축키 : 드래그 + C)

팁! 함수 외우기

피치볼할래? 끄덕끄덕(위아래 회전)

공부할래요? 아뇨(양옆 회전)

롤 잘해요? 까딱까딱(왼오 배그QE처럼)

<위 아래 카메라 무빙>
Camera에서 Use Pawn Control Rotation 체크 해제 후 BP_Characer 클릭하고 Pitch 검색 (사진처럼 체크)

변수 만들기 (IsAming, False)

Inputs 폴더에 IA_Aim 추가(Bool 설정)

IMC_FPS에서 Mappings에 IA_Aim 추가

마우스 우클릭으로 조준모드, 일반모드 바꾸기(NOT Boolean 노드 활용, B 누르고 클릭하면 Branch(참거짓) 생성)

  • 오늘은 여기까지!

FPS 숙제!

과제 1: 조준 관련 변수 추가 (DefaultFOV : 일반 시야각, 90/ AimFOV : 조준 시 좁아지는 시야각(시야 확대), 60)

과제 2: 캐릭터 배치 확인

과제 3 (도전): Print String 활용
탄약 수 출력하기


C 라이브세션 복습

  • Ex010602

  • Ex010603

리터럴 : 소스코드에 적힌 값 그 자체

  • Ex010701
  • Ex010702

  • Ex010801
    #include <stdio.h>

int main(void)
{
65536; // int 자료형의 리터럴. 즉, int는 "기본 정수 자료형".
65536LL; // LL은 long long의 약자. 즉, long long 자료형의 리터럴 기호. l은 1과 헷갈리기 때문에 잘 안씁니다.
65536u; // u는 unsigned의 약자. unsigned의 리터럴 기호.
3.141592; // double 자료형의 리터럴. 즉, double은 "기본 실수 자료형".
3.141592f; // float 자료형의 리터럴 기호 f.
'd'; // char 자료형의 리터럴. ''는 char 자료형의 리터럴 기호.
"Hello, world!"; // 문자열 리터럴. ""는 문자열 리터럴 기호. const char[] 자료형 리터럴 기호.

return 0;

}

  • Ex010901) 자료형 변수명 = 값

  • Ex010902) 오버플로우

C언어 라이브 세션

증감 연산자 : 증가/감소의 줄임말. 앞서 살펴본 연산자들과 다르게
단항의 피연산자를 가지는게 특징. ex) ++Num; -> Num이라는 숫자에 1을 더하겠다

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

C언어에서는 0은 거짓(false). 0 이외의 모든 값은 참(true)
논리 연산자 : 피연산자를 참 혹은 거짓으로 평가한 후에 논리 연산을 수행(불리언)
관계 연산자 : 피연산자 간의 관계(대소, 대등, …)를 판단하는 연산자.

형변환 연산자(Type-cast Operator) : 자료형 A에서 자료형 B로 변환 시켜주는 연산자
5 / 2; // == 정수 / 정수
(float)5 / 2; // == 실수 / 정수 == 5.0f / 2 == 2.5f

  • C언어 나눗셈 규칙 : 정수 ÷ 정수 = 정수 (소수점 아래는 반올림 없이 무조건 버려)
  • C언어는 정수와 실수를 계산할 때, 더 범위가 큰 실수에 맞춰서 계산

삼항 연산자(Ternary Operator) : 피연산자로 세 개의 항을 갖는 연산자
ex) 4 < 5 ? 0 : 1; -> 4보다 5가 더 크면 0, 아니면 1 출력

  • Ex020302) 삼항 연산자의 활용

1️⃣int 자료형 변수 Num1과 Num2를 선언해봅니다.
2️⃣Num1과 Num2에 각각 4와 5를 저장합니다.
3️⃣Num1과 Num2중 더 큰 값이 출력되게끔 하는 코드를 작성해봅시다.

sizeof : 단항 피연산자를 가지며, 피연산자의 자료형 크기를 바이트 단위로 반환
ex ) sizeof(char); // == 1; 1바이트

  • Ex020303

만약 조건식~ 한다면 명령어 실행
if (조건식);
{
명령어1;
명령어2;
...
}
.
.
.

If-else문
if (조건식)
{
명령어1; // 조건식이 참이면 여기가 실행됩니다.
...
}
else
{
명령어2; // 조건식이 거짓이면 여기가 실행됩니다.
...
}

  • Ex030301) if-else문

  • Ex030401) if-else if-else문

  • Ex030402) if ifelse문

  • Ex030501) 중첩 if문

Switch-case문

  • switch-case문은 if-else if-else문으로 치환 가능
  • 만약 case 내에서 변수를 선언하려면 아래와 같이 중괄호를 쳐주면 됨
    switch (Num)
    {
    case 값1:
    명령어1; // "Num == 값1"인 경우엔 명령어1
    ...
    break;

case 값2:
명령어2; // "Num == 값2"인 경우엔 명령어2
...
break;

default:
명령어3; // "Num이 값1도 값2도 아닌 경우"(Num이 어떤 케이스에도 속하지 않는 경우)엔 명령어3
...
break;
}

  • Ex030601) switch-case문

While문
while (조건식)
{
명령어1;
...
}

  • Ex040101) while문

  • Ex040102) 누적합(창작)

  • Ex040103) 누적곱(창작)
  • Ex040104) 최대값

  • Ex040105) 최소값

  • Ex040201) for문

do-while문 : 일단 조건식 검사 없이 1회 순회(do) 후에 조건식 검사 후 다음 순회 진행
do
{
명령어1;
...
} while (조건식)

  • Ex040501) “천천히 읽기”와 이중 반복문

  • Ex040601

profile
초보 개발자

0개의 댓글