ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아이템 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
Designed by Tistory.