-
아이템 Enum값 추가Game Programming/언리얼 2023. 10. 17. 16:21
item.h and item.cpp
UENUM(BlueprintType) enum class EItemState : uint8 { EIS_Pickup UMETA(DisplayName = "Pickup"), EIS_EquipInterping UMETA(DisplayName = "EquipInterping"), EIS_PickedUp UMETA(DisplayName = "PickedUp"), EIS_Equipped UMETA(DisplayName = "Equipped"), EIS_Falling UMETA(DisplayName = "Falling"), EIS_MAX UMETA(DisplayName = "DefaultMAX") };
아이템 상태 enum값을 추가했다. 아래와 같이 사용되는 것 같다.
Pickup 아이템을 집을 수 있는 상태 EquipInterping 아이템을 집어 날아오고 있는 상태 PickedUp 아이템을 주어, 인벤토리에 보관한 상태(?) Equipped 아이템을 장착한 상태 Falling 아이템을 떨어뜨리는 상태 그리고 MyCharacter에서 아이템 상태를 변경 할 수 있도록 Get, Set을 추가했다.
FORCEINLINE EItemState GetItemState() const { return ItemState; } void SetItemState(EItemState State);
SetItemState는 아이템 상태를 변경하면서 물리 충돌 정보까지 변경하도록 코드를 만들었다.
void Aitem::SetItemState(EItemState State) { ItemState = State; SetItemProperties(ItemState); }
SetItemProperties 함수에 대해 설명하자면
EIS_Pickup(플레이어가 아이템을 집을 수 있는 상태)
ItemMesh AreaSphere CollisionBox EIS_Pickup 물리, 충돌을 끈다. 충돌 미 발생
이벤트 발생ECC_Visibility 채널 충돌 발생 EIS_Equipped 물리, 충돌을 끈다. 충돌 미 발생
이벤트 미 발생모든 채널 충돌 미 발생 void Aitem::SetItemProperties(EItemState State) { switch (State) { case EItemState::EIS_Pickup: // Set mesh properties ItemMesh->SetSimulatePhysics(false); ItemMesh->SetVisibility(true); ItemMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); ItemMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision); // Set AreaSphere properties AreaSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Overlap); AreaSphere->SetCollisionEnabled(ECollisionEnabled::QueryOnly); // Set CollisionBox properties CollisionBox->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); CollisionBox->SetCollisionResponseToChannel( ECollisionChannel::ECC_Visibility, ECollisionResponse::ECR_Block); CollisionBox->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); break; case EItemState::EIS_EquipInterping: break; case EItemState::EIS_PickedUp: break; case EItemState::EIS_Equipped: // Set mesh properties ItemMesh->SetSimulatePhysics(false); ItemMesh->SetVisibility(true); ItemMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); ItemMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision); // Set AreaSphere properties AreaSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); AreaSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision); // Set CollisionBox properties CollisionBox->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); CollisionBox->SetCollisionEnabled(ECollisionEnabled::NoCollision); break; case EItemState::EIS_Falling: break; case EItemState::EIS_MAX: break; default: break; } }
MyCharacter.h and MyCharacter.cpp
무기를 처음 생성하고 손에 붙일 때 아이템 상태를 EIS_quipped로 변경하는 코드를 SpawnDefaultWeapon에 추가했다.
EquippedWeapon = DefaultWeapon; EquippedWeapon->SetItemState(EItemState::EIS_Equipped);
'Game Programming > 언리얼' 카테고리의 다른 글
Item Falling State (0) 2023.10.17 무기 버리기 (1) 2023.10.17 무기 생성 (1) 2023.10.17 클래스 배열 PickupWdigetBP 바인딩 (1) 2023.10.17 Bind item name (1) 2023.10.16