Timeline
https://tech-interview.tistory.com/306
간단한 시간 기반 애니메이션 구현 목적의 노드
Pawn
A Pawn is an actor that can be 'possessed' and receive input from a controller.

Level의 설정 = World Settings

게임플레이 프레임워크
공식문서
- GameMode(중요)
- 월드에서 사용할 기본 클래스 결정
- Pawn
- 꼭두각시: 게이머가 시각적 피드백을 받을 대상
- PlayerController
- 인간 플레이어가 폰을 제어하는 비물리적 액터. Possess/UnPossess 함수를 사용해 제어.
- 입력 처리, 카메라 관리의 총괄자
- GameState
- 게임 데이터 저장용 객체
- PlayerState
- 플레이어 관련 데이터 처리 객체 게임플레이 시작 시 시퀀스:
- GameMode 로드
- GameMode에서 설정된 각 클래스 객체 생성
- Pawn & PlayerController 생성
- Possess(빙의) 호출 → Controller가 기본 Pawn을 소유
- Controller가 Possess할 Pawn의 Camera 검색 → 있으면 찾은 카메라 사용, 없으면 기본 카메라 사용
- GamePlay 준비(입력 받을 준비 등)

- 흰색 객체: 레벨에 고정 설정돼있는 객체들
- 노란색 객체: GamePlay 시 동적으로 생성되는 게임플레이를 위한 객체들
Input
https://velog.io/@yoo06/UE5-Enhanced-Input-알아보기

입력 액션의 타입 설정은 Input Action에서, 실제 입력에 대한 매핑은 IMC에서 처리함


축 매핑 = Axis 버튼 매핑 = Digital
언리얼은 w키 이동이 y축이 아니라 x축이라 조심해야함

키보드 입력은 조이스틱처럼 부호를 알 수 없으므로(digital) Negate Modifier를 처리해줘야함


BP_Pawn EventGraph에서 인풋 액션의 입력값을 XY축 교차하여 오프셋 변경 노드(Add Actor Local Offset)에 연결시켜줌
근데 이렇게 직접 Pawn의 키입력을 조정하지는 않고 보통 입력이 필요하면 Character 클래스의 내장된 CharMovmentComponent를 사용함

오프셋 변경 노드를 사용하면 충돌을 완전히 무시함(절대이동). 캐릭터 이동 컴포넌트는 충돌처리까지 추상화되어 제공됨
Character Look
CollisionBox Z축과 Mesh Z축 맞추기 + 언리얼 기준 X축으로 쳐다보도록 SkeletalMesh Z축 회전(기본적으로 해주기)
Redirector
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/asset-redirectors-in-unreal-engine
Animation

AnimGraph
- 애니메이션을
Blend Poses by bool로 연결, Locomotion Cache(State Machine) 노드로 연결 - MovementSpeed 변수 하나 생성해서 Greater로 Active Value에 연결 Locomotion(운동) State machine
- Locomotion Cache를 Output Animation Pose의 Result로 연결시켜줌
- Locomotion 상태머신을 Output Pose의 Result로 연결시켜줌 EventGraph
- BP Update Animation 노드에서 MovementSpeed Setter로 연결
- Setter는 Vector Length의 반환 값임
- Vector Length는 Get Velocity 노드의 반환값임
- Get Velocity 타겟은 Try Get Pawn Owner의 반환값임
AnimClass
SkeletalMesh 컴포넌트의 Anim Class는 '클래스 정보'를 저장(클래스를 생성해서 인스턴스를 참조하는게 아니라 타입만 따로 저장할 수 있음) → 저장한 클래스 정보(타입)를 기반으로 실행할 때 인스턴스 생성(애니메이션 처리는 각 인스턴스 별로 독립적으로 처리해야하므로 클래스 정보만 들고 있는게 유리함)
How Animation Blend works
Bone들의 위치가 아니라 회전 transform이 바뀜
- Tween
Roll, Pitch, Yaw
- X, Y, Z축은 환경마다 정의가 달라서 절대적인 롤 피치 요 축을 사용한다
- 다렉은 피치 요 롤 순서?ㅋㅋ 3인칭 캐릭터 카메라에선 Pitch, Yaw
virtual shadow map
https://jooh3444.tistory.com/36
Lights
https://palebluedot00.tistory.com/49
- Directional Lights: 방향광, 태양광 시뮬레이션하는 빛. 위치 의미 없고 방향만 의미 있음
- Exponential Height Fog: 조명의 산란정도. 거리에 따른 선명도. 거리에 따른 안개는 만들기 쉽지만 높이에 따른 안개는 만들기 어려움
- Sky Atmosphere: 구름, 하늘 등 대기 원근
- Sky Light: 레벨에서 멀리 떨어진 빛을 캡처해 씬에 적용. 간접광 색상을 자연스럽게 만들어줌.
Global Illumination
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/global-illumination-in-unreal-engine 직접광은 누구나 다 잘하지만, 간접광(두번째 이후부터의 반사광)이 때깔의 차이를 만드는 부분임 간접광이 없으면 빛이 날카로워짐(싼티남) 예전엔 기술력이 없어서 미리 텍스쳐에 빛을 그려놨음 → 지금은 값들을 추출해서 계산해 적용함(그럼에도 실시간 계산은 아직 아님)

Level Streaming
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/level-streaming-in-unreal-engine
레벨 스트리밍 기능을 사용하면 플레이 중에 맵 파일을 메모리에 로드하고 언로드할 수 있을 뿐 아니라 비저빌리티를 토글할 수도 있습니다. 이를 통해 월드를 더 작은 청크로 쪼개어 월드의 관련 부분만 리소스를 차지하게 하고 언제든지 렌더링되도록 할 수 있습니다. 레벨 스트리밍을 제대로 수행하면 플레이어가 월드 내에서 자신이 아주 작은 모습으로 플레이하는 듯이 느낄 수 있는 끊김없는 대형 게임을 만들 수 있습니다.
Persistent Level
레벨을 매끄럽게 혼합하려면 먼저 퍼시스턴트 레벨(Persistent Level)을 생성해야 합니다. 퍼시스턴트 레벨은 일종의 마스터 레벨로서, 어떤 레벨을 스트리밍할지 제어하는 데 주로 사용됩니다.


Level Streaming Volumn
- ViewPoint가 볼륨 밖에 있으면 레벨 언로드 됨 → 생각보다 더 크게 볼륨을 잡아야 함
- 장점: 코드 작성 필요 없음
언리얼의 레벨 블루프린트
- C++ 소스코드와 달리 레벨 블루프린트는 레벨에 배치된 리소스를 모두 알지 못함. 따라서 이벤트 발행해 상호작용하게 할 수 있음
시야각(frustum)
https://blog.naver.com/ideugu/221425095052
