1. Equipment Instance

- 무기에 따라 애니메이션이 바뀌도록 베이스 클래스
LyraEquipmentInstance
생성
- 장착할 수 있는 무기의 베이스 클래스
LyraWeaponInstance
생성
- 총, 칼 등 사거리가 존재하는 무기는 이를 상속받은
LyraRangedWeaponInstance
로 구현
UCLASS()
class LYRALIKE_API ULyraWeaponInstance : public ULyraEquipmentInstance
{
GENERATED_BODY()
public:
ULyraWeaponInstance(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Animation)
FLyraAnimLayerSelectionSet EquippedAnimSet;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Animation)
FLyraAnimLayerSelectionSet UnequippedAnimSet;
};
FLyraAnimBodyStyleSelectionSet
과 헷갈리면 안됨!
FLyraAnimLayerSelectionSet
애니메이션 레이어를 설정하는 구조체
- 즉 장착하는 무기에 따라 재생되는 애니메이션이 달라짐
USTRUCT(BlueprintType)
struct FLyraAnimLayerSelectionEntry
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TSubclassOf<UAnimInstance> Layer;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FGameplayTagContainer RequiredTags;
};
USTRUCT(BlueprintType)
struct FLyraAnimLayerSelectionSet
{
GENERATED_BODY()
// LyraAnimBodyStyleSelection의 MeshRule과 같이 AnimInstance의 Rule을 가진 LayerRules로 생각하면 됨
// 태그를 통해 레이어를 가져옴
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<FLyraAnimLayerSelectionEntry> LayerRules;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TSubclassOf<UAnimInstance> DefaultLayer;
};
- LyraCosmeticAnimationTypes.h에 정의됨
- 메시를 선택하기 위한
AnimBodyStyleSelectionSet/Entry
와 동일한 구조로, AnimLayer에 대해 Set/Entry를 정의


- B_Manny처럼 무기의 외형을 담당하는 블루프린트 액터 생성



- B_Weapon을 상속받은 B_Pistol 생성
- Lyra에서 총 외형인 SK_Pistol과 애니메이션인 ABP_PistolAnimLayers Migrate

UCLASS(BlueprintType, Blueprintable)
class LYRALIKE_API ULyraEquipmentInstance : public UObject
{
GENERATED_BODY()
};
EquipmentInstance
를 상속받는 RangedEquipmentInstance
를 에디터 상에서 Blueprint로 구현하기 위해, BLueprintType과 Blueprintable을 선언

- B_RangedWeaponInstance를 상속받는 Base Blueprint 생성

- B_WeaponInstance_Base를 상속받는 B_WeaponInstance_Pistol 생성

- B_WeaponInstance_Pistol에 장착 시 사용할 AnimLayer 세팅

- 재생 시 여기서 에러가 발생
- 발 관련 BP인 것으로 추정
- 우리는 사용하지 않을 것이므로 에러나는 노드 모두 제거

2. Inventory, QuickBar, Equipment Frame
1. Inventory 관련 파일 생성

/**
* Fragment_EquippableItem: EquipmentItemDefinition을 가지며, 장착 가능한 아이템을 의미
* Fragment_SetStats: 아이템에 대한 정보(Rifle에 대한 SetStats로 Ammo에 대한 장착 최대치 & 남은 잔탄 수 표시 등)
*/
UCLASS(Abstract, DefaultToInstanced, EditInlineNew)
class ULyraInventoryItemFragment : public UObject
{
GENERATED_BODY()
public:
};
- ItemDefinition에 Fragment라는 새로운 클래스 정의
- 아이템 구조의 경우 다양한 방식으로 구현 가능하며, 각각의 방식에도 여러 장단점이 있음
- Lyra에서는 Fragment라는 단위를 도입(==Component와 유사)
2. Inventory 관련 코드 작성