Modular Gameplay Actors
AddComponent가 가능한 대상은 GameFrameworkComponentManager에 등록되어있어야 한다.
Character,PlayerController 대신 ModularCharacter, ModularPlayerController을 상속받으면 자동으로 등록된다.
Cosmetic
플레이어에 붙이는 Mesh또한 컴포넌트화해서 붙였다 뗐다 할 수 있다.
ControllerComponent_CharacterParts
어떤 캐릭터 모양을 쓸지 여러개를 들고 있음
메타데이터만 들고 있음
ControllerCharacterPartEntry
CharacterPart - CharacterPart에 대한 정의를 메타데이터로 가짐
액터의 TSubClassOf 클래스(메타데이터), 소켓 이름(파츠를 특정 소켓에 붙이고 싶을 경우 대비)을 가짐
CharacterPartHandle - 장착한 CharacterPart를 고유값으로 가짐
PawnComponent_CharacterParts
사용할 캐릭터 모양 하나를 말함
메타데이터를 받아 장착함
CharacterPartList
AppliedCharacterPartEntry - 적용된 파츠 메타데이터, 핸들값, 인스턴스화된 액터를 가짐(파츠 교체시 제거 위해)
언리얼 데디케이트 서버 통신 방식은 배열 일부를 수정했을 때 배열 전체 데이터를 다시 보내야 한다.
그래서 SerializedArray 라는 방식을 이용하는데, 이 때 조건이 배열과 요소를 구분시켜야 한다. 그러면
일부를 수정했을 때 일부 데이터만 보내면 된다. 그래서 CharacterPartEntry와 List로 나눈 것이다.
AnimBodyStyleSelectionSet
AnimBodyStyleSelectionEntry - Animation,Mesh간 Rule을 뜻한다.
Mesh와 GameplayTag를 가진다. GameplayTag에 맞는 Mesh를 가져온다.
ControllerComponent_CharacterParts는 GameFeature의 Add Components에서 추가하고,
PawnComponent_CharacterParts는 플레이어 블루프린트에서 직접 추가하는데 왜 그런걸까?
ControllerComponent는 가벼운 메타데이터를 들고 있고 PawnComponent는 무거운 Mesh를 들고 있다.
그래서 한번에 모든 Mesh를 들고 다닐 수 없기 때문에 따로 추가한 후 종류별로 Mesh를 별도 설정한다.
장착 로직
AddCharacterPart
GetPawn에서 FindComponentByClass로 PawnComponent_CharacterParts를 찾고 거기에다
AddCharacterPart한다. 그러면 PawnComponent에서 CharacterPartList에 파츠를 추가한다.
CharacterPartList::AddEntry에서 AppliedCharacterPartEntry를 SpawnActorForEntry에 전달한다.
SpawnActorForEntry에서 OwnerComponent->GetSceneComponentToAttachTo로 Pawn을 구하고
전달받은 파츠의 메타데이터 PartClass를 SetChildActorClass 후 RegisterComponent하면 파츠가 스폰된다.
그리고 파츠(자식)가 폰(부모)보다 먼저 Tick되지 않도록 AddTickPrerequisiteComponent함수로 제한한다.
SpawnActorForEntry가 성공하면 BroadcastChanged를 실행하는데 게임플레이태그에 맞는
SkeletalMesh, PhysicsAsset을 Set한다.
Possess하는 Pawn이 바뀔 때 마다 OnPossessedPawnChanged함수를 바인드 해 실행하게 한다.
Pawn이 바뀌면 현재 파츠를 전부 제거하고 새로운 폰의 파츠를 부착한다.
'Unreal' 카테고리의 다른 글
| [Unreal] Lyra 프로젝트 분석 - 09. Ability System (0) | 2025.02.09 |
|---|---|
| [Unreal] Lyra 프로젝트 분석 - 08. Weapon System (0) | 2025.02.09 |
| [Unreal] Lyra 프로젝트 분석 - 06. Game Feature (0) | 2025.02.08 |
| [Unreal] Lyra 프로젝트 분석 - 05. Input (0) | 2025.02.07 |
| [Unreal] Lyra 프로젝트 분석 - 04. Camera (0) | 2025.02.07 |