어제 복습
레벨 스트리밍
- 레벨 로드는 File I/O다.
Input Action & Mapping Context
- 키보드 입력은 0 or 1이기 때문에 2차원 x, y -1 ~ 1에 대응시키려면 YXZ swizzle에 negate 적용이 필요하다
- 캐릭터가 회전하는 방향은 엔진 마음이다
카메라
- 스프링 암에 카메라를 달아 카메라가 고정되도록 했다
- roll은 왠만해선 건드리지 않는다. pitch 축의 회전각을 조절해 뒤로 젖혀지는 현상을 방지한다. yaw로 좌우 도리도리

- 카메라 세팅으로 폰 컨트롤 회전을 사용하게 한다
애니메이션
- Animation Graphs: 자세 설정
- 언리얼은 애니메이션 캐시 노드로 여러 곳에서 재활용할 수 있다(유니티는 지원안함)
- Event Graph: 상태 설정
- SkeletalMesh가 애니메이션을 소유해야 이벤트 그래프가 동작함
- Event Graph는 애니메이션의 Tick임
- Event Graph에서 설정된 MovementSpeed가 조건에 따라 AnimGraph에서 어떤 애니메이션을 블랜딩할지 결정하는거임임
오늘 진도
CameraManager
- 좌우 드래그는 제한없지만 상하 드래그는 제한할 수 있다. 그것을 PlayerCameraManager→Player Camera Manager 옵션에서 제한할 수 있다
-

- 그 후 Controller에서 CameraManagerClass를 내가 만든 카메라 매니저로 등록해주면 설정된 카메라를 사용할 수 있다
-

프로젝트 설정

기본 게임 모드 설정이 있고 각 월드마다 게임모드를 덮어씌울 수 있다(override)
- 상점, 인벤토리 레벨처럼 컨트롤이 다를 땐 게임모드를 모듈화해서 교체하는 방식으로 개발한다
공격
Finite State Machine
- State
- Start/Enter
- Update/Tick
- End/Exit
A.Exit() → B.Start() → B.Update() ⤿⤾
- Transition
- 특정 조건 만족 시 다른 상태로 변경하도록 허용
- 인접한 상태끼리만 전환 가능
- Condition 장점
- 이해하기 쉽다 단점
- 쉽게 복잡해진다
Locomotion ↔ Attack
- EPlayerState 열거형으로 Locomotion, Battle, Dead 상태 추가
- AnimGraph의 Variables로 추가
- State Machine 안에서 서로 다른 상태를 화살표로 연결해준 뒤 화살표 안으로 들어가서 enum equals 노드로 enum과 transition을 연결해줌
캐릭터의 상태 관리
- 누가(어느 객체가) 관리할지를 결정해야 함
- 보통은 블루프린트(C++)에서 관리함
- 애니메이션에서 관리하고 블루프린트에서 구독하는 설계도 가능함
특정 상태 종료처리
- 특히 애니메이션과 관련된 경우에는, 애니메이션에서 이벤트(신호)를 발행해 블루프린트에서 변환하도록 처리한다.
- 블루프린트에서 애니메이션에 가서 물어볼수도 있으나 상당히 불편하다

- locomotion 상태일때만 battle 상태로 전환을 허용하고(시작 조건)
- attack이 끝날 때 다시 locomotion 상태로 전환해줘야 한다(종료 조건) Custom Event 연결하기

- 애니메이션의 프레임 그래프에서 AttackEnd Notifier 태그 달기

- 애니메이션 이벤트 그래프에서
AnimNotify_AttackEnd노드로 Attack End 이벤트를 캐릭터에 흘려준다.
공격 모션 종료 보장
UE5 애니메이션 노티파이애니메이션 몽타주
Montage: 이미지 일부를 잘라내 한 화면에서 합성하는 회화 기법
- 처리되는 곳이 로직도 아니고 애니메이션도 아님
- 애니메이션 재생은 기본적으로 애니메이션 시스템에서 처리
- 그런데 몽타주는 재생을 로직에서 처리함. 재생을 받는 곳은 애니메이션 시스템
Animation Montage (애니메이션 몽타주, 혹은 줄여서 그냥 몽타주)는 폭넓은 애니메이션 이펙트가 가능해지는 다목적 툴로써, 주로 코드를 통해서나 블루프린트 비주얼 스크립트 안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있습니다. 애니메이션의 지능형 루프, 로직 기반 애니메이션 전환, 루트 모션 핸들링, 기타 여러가지 다양한 애니메이션 이펙트를 만드는 데도 사용 가능합니다. 공식문서
- 콤보 만들 때 주로 사용
그룹/슬롯
- 그룹 당 하나의 몽타주만 재생 가능
- 보통 상/하체 슬롯으로 나눔(FPS류)
디버깅

언리얼 네이밍 컨벤션
권장하는 에셋 명명 규칙OnComponentBeginOverlap
OnActorBeginOverlap과 다른점:
- 해당 컴포넌트 충돌만 검사할 수 있다
- OnActorBeginOverlap은 액터가 가지고 있는 모든 충돌체 중 하나만 충돌해도 참을 반환한다
Reference
- Hard Reference: A direct pointer to an asset. When the asset containing a hard reference is loaded, the referenced asset is also automatically loaded into memory.
- Object Reference: 메모리에 올라가있는 인스턴스 주소 참조
- Class Reference: 클래스의 타입 참조
- Soft Reference: An indirect pointer, typically storing the asset's path. It allows you to hold a reference to an asset without having it in memory until you explicitly request to load it (asynchronous loading)
- Soft Object Reference
- Soft Class Reference
Delegate(Observer Pattern)
- 이벤트 발생 시에 구독하고 있는 델리게이트들만 각자의 로직 처리 장점
- 코드 오염을 방지할 수 있다(=디커플링) 단점
- 디커플링돼있는만큼 디버깅하기 쉽지 않다
- 콜 스택을 많이 사용해 느리다