엊그제는 너무 늦게 자고 수면이 부족했는데 … 오늘은 그래도 4시간 반 정도 자서 조금 괜찮은 듯… 밀린 거 빨리 마무리하고 좀 자자.
우선 여긴 가볍게 개념만 정리하고 자세하게 정리했던건 따로 포스팅하자.
Agenda: 코드카타, C언어 세션, Unreal Blueprint 라이브 세션
코드카타
코드카라란: 매일 코드 문제 풀이 (알고리즘 공부) 하는거
원래 오늘부터인데 일정이 밀려서 내일부터 알려준다고 한다.
내일 이전에 쓰다가 말았던 git-io에 정리해서 같이 올려야겠다.
아마 ‘프로그래머스: https://programmers.co.kr/’ 여기서 문제 풀어서 제출하는 듯?
이왕 하는 거 난 영어로도 풀어보자, 찾아보니 HackRank 가 입문이고 LeetCode 가 인터뷰 준비용으로 더 어렵다는데 우선 내일 한번 문제 풀어보자.
- HackRank: https://www.hackerrank.com/domains/cpp
- LeetCode: https://leetcode.com/problems/two-sum/
C언어 세션
- 오늘 배운 건 거의 아는 것이어서 주제만 적음.
서식지정자 (Format Specifier): 입출력 함수들과 함께 쓰여서
양식에 맞게 입출력할 수 있게끔 도와주는 지정자
진수 진법들: 2, 8, 10, 16
- 컴퓨터 공학에서 가장 작은 크기 단위는 1 bit. 이진법의 한 자리에 해당하는 크기.
- 컴퓨터 상식적으로 8 bits를 1 byte라고 부름.
- 다시 1024 bytes를 1 mb라고 부름.
리터럴 (Literal)
소스코드에 적힌 값 그 자체를 뜻한다
자료형 (Type)
char, short int, int, long, long long, float, double, long double
변수(Variable) 상수(Constant)
unsigned 키워드와 signed 키워드
부호 없는 Vs. 부호 있는
- unsigned를 자료형 앞에 붙이면 음수는 표현 불가능, 대신 양수 부분이 2배 늘어남.
- 서식 지정자로는 %u를 쓰면 됨.
- 모든 자료형은 사실 앞에 signed 키워드가 생략되어 있다.
오버플로우(Overflow): 자료형이 표현 가능한 수를 넘어서는 경우.
개인 적으로 새로 배운 거
#include에서 <>와 “” 차이
- <>는 시스템 상내에서 찾는다
- 우리 프로젝트 내에서 먼저 찾고 없으면 시스템 경로로
Unreal Blueprint 라이브 세션
- 개념들은 다 아는 것들이지만 무엇이 어디에 있는지 위치를 몰라서 아직 조금 헤매게 된다, 그리고 몇몇 용어들은 유니티랑 다르게 쓰는데 추후 다시 정리해 보자.
작업한 것
- Map: Fab에서 “Stylized Egypt” 다운받아서 적용
- Mesh: FPS 니깐 손이랑 애니메이션은 UE5 기본 FPS 프로젝트에서 가져옴. Riffle 은 Fab에서 ‘M16 A1 Rifle’ 다운
- 카메라 위치와 손의 위치 조정
- 손뼈와 라이플 연결: hand_rSocket에서 우클릭 → Add Preview Asset → SK_M16_Scope선
- 이동 & 마우스 조작 [IMC (Input Mapping Context), IA (Input Action)]
- 조준[ADS (Aiming Down Sight)] 시스템구현
- FOV(Field of View) (시야각) 조정해서 줌 하는 느낌 구현
- 한 번에 변하는 게 아닌 타임라인 만들고 Lerp로 구현
- Timeline 노드 BP에서 만들어서 연결할 때 ‘play’가 아니라 ‘Play From Start’로 해야 줌 애니메이션이 반복 실행 가능함 (Timeline 안에서 0 (시작점)으로 다시 돌아와야 하기에) (안 그러면 끝난 지점(value)에 머무름
- Locomotion 애니메이션 중 IDEL & RUN 구현
- Speed 받아와서 그걸 기준으로 실행
- 둘 다 loop 설정해야 함. 안 하면 애니메이션이 한 번만 실행됨)
- 외워야 할 개념들
| 에디터 | 뷰포트(3D 화면), 아웃라이너(배치 목록), 디테일(속성 편집), 콘텐츠 브라우저(파일 관리) |
| 블루프린트 | 코드 대신 노드를 연결해서 로직을 만드는 비주얼 스크립팅 |
| 핀 | 실행 핀(흰색) = 순서, 데이터 핀(색상별) = 값 전달 |
| 액터 vs 캐릭터 | 액터 = 레벨에 놓을 수 있는 물체, 캐릭터 = 이동/입력이 가능한 액터 |
| 컴포넌트 | Camera, SkeletalMesh, SceneComponent 등을 조합해서 캐릭터를 구성 |
| 소켓 | 뼈(Skeleton)에 부착 지점을 만들어서 총 같은 오브젝트를 손에 고정 |
| FAB | 무료 에셋을 검색해서 프로젝트에 바로 추가 |
| 조작법 | 컴파일 = 변경사항 적용, PIE = 게임 실행, F8 = 빙의 해제 |
| IMC (Input Mapping Context) | 입력 매핑들을 하나로 묶어놓은 묶음. "FPS 조작할 때는 이 묶음을 써라"처럼 상황별 입력 세트를 통째로 관리. 걸어다닐 때 IMC, 차량 탈 때 IMC를 따로 만들 수 있음 |
| IA (Input Action) | 하나하나의 동작을 정의한 것. IA_Move = "이동", IA_Look = "시선 이동". 어떤 키를 누르는지는 모르고 "이런 동작이 있다"만 정의. 어떤 키랑 연결할지는 IMC에서 설정 |
입력 매핑 키보드/마우스 버튼을 누르면 게임에서 어떤 동작을 할지 연결해 주는 것. "W키 → 앞으로 이동"처럼 입력과 동작을 이어주는 설정
| 이동 구현 | Add Movement Input으로 이동. 앞/뒤는 Forward Vector, 좌/우는 Right Vector 사용 |
| 시선 구현 | Add Controller Pitch Input = 위/아래, Yaw Input = 좌/우 회전. 카메라의 Use Pawn Control Rotation을 끄고 Pawn 자체를 돌려야 손·총이 함께 움직임 |
| 조준 (ADS) | 우클릭마다 IsAiming을 NOT으로 토글. Timeline + Lerp로 FOV를 90↔60 부드럽게 전환 (Play from Start 필수) |
| Animation Blueprint + State Machine | 캐릭터 상황에 맞는 애니메이션을 자동 재생. Locomotion 상태머신에서 Idle↔Run 전환 규칙을 Speed로 판단 |
| Speed 변수 | Get Velocity → Vector Length XY로 Z축 제외한 속력을 구해 변수로 저장 → 전환 규칙에 사용 |
입력 매핑 (IMC/IA) IMC = 입력 묶음, IA = 개별 동작 정의. IMC에서 IA와 실제 키를 연결
- 언리얼은 왼손 좌표계다
Conclusion
- 코드카타, C언어 세션, Unreal Blueprint 라이브 세션
추천글:
- 하버드의 무료 온라인 강의인 CS50 수업 중 C언어 2시간짜리 있는데 그게 쉽고 빨라서 추천한다. : https://youtu.be/SlqjA04_dpk
