프로젝트를 하면서 따로 TIL을 정리를 말끔하게 할 수 없어서 프로젝트를 하는 기간에는 TIL을 쓰는 방식을 바꾸기로 했다.
프로젝트를 하는 중간중간에 메모를 하는 느낌으로 진행
프로젝트를 진행하기 위해 참고하는 Templete인 Multiplayer Arena의 BluePrint 내부를 살펴보았다.
탬플릿 내부에는 BP_MainCharacter를 활용하고 내부에는 많은 Component를 활용함.
그중에서 BPC_CombatStateManager를 살펴보았다.
게임이 시작되면 Replicated를 활성화하고 Component도 활성화.
GetOwner로 Character를 가져와서 서버인지 확인(Owner Has Autority)
Set w/Notify를 통해 (Set with Notify) Client에 해당 함수 실행
ComponentBeginplay가 실행이 되고 Character 변수를 Promote해서 Set 한뒤 Replecated
한뒤 Character에 Tags 부여
Tags는 GamePlay Tag타입
Unreal의 FGamePlayTagContainer는 내부적으로 TSet<GameplayTag>
를 래핑한 구조로 돌아감
struct FGameplayTagContainer
{
TSet<FGameplayTag> GameplayTags;
...
};
F_SP_Add Single_Player_Tags 함수를 통해 해당 Character에 Tag를 부여
AI 인지 확인을 한 후 Get Single Player AI Type을 통해 AI Type 반환 첫번째 (Type 은 아래 Enum 값을 통해 찾음)
AI 라면 Select_1을 통해 Enemy, Companion Tag가 부여되는걸 알 수 있음.
Player라면 (함수 Input Parameter) Player Tag로 덮어쓰도록 설정하고 TagContainer에 해당 Tag들을 추가
이후 캐릭터에 설정된 ABP와 Speed를 변수로 Promote하고 Construct Character Event 실행
FindAnimSetNamefromEnum을 통해 Animation Set Name을 가져옴
Row값을 찾았다면 Branch True 실행 이후에 나오는 BeginPlay Spawn Weapon이 실행됌.
Break S Character Construct를 통해 Row 내부의 값을 변수로 설정
Use Data Table Attributes (데이터 테이블 속성 사용 bool) 를 통해 True면 Apply Struct Attributes 실행
ThirdPerson
Input Parameter는 DT_Character 의 Row값 Animataion Set Name이다.
위의 Name을 통해 Animation DT 값을 찾음
여기서 해당 몽타주를 할당
Row 값을 들고와서(몽타주들이 할당되어있는 저장값)을 Current Animation으로 변수승격
Row 내부의 HitReactionDTName, BlockDTName 을 통해 Hit Reaction DT, Block DT로 부터 찾아서 변수로 승격
Spawn and Attach Weapon
👉 전반부
Character의 서버동작을 확인한 후 Init Weapon Struct를 비움. (Init Weapons Struct는 TMap WeaponMap<Name, Actor>
)
CurrentAnimSet에서 (Dt에서 가져온 Raw 값) Weapons to Spawn TArray 가져오고 Loop 진행
Array의 Name promote