본문 바로가기
언리얼 엔진/기초

[Unreal Engine5] 무기 매커니즘 만들기(2) - 공격시에만 무기 히트박스 활성화

by TyT. 2023. 8. 24.
반응형

GitHub: https://github.com/tyt0815

 

tyt0815 - Overview

tyt0815 has 4 repositories available. Follow their code on GitHub.

github.com

Notion: https://www.notion.so/tyt0815/a16514d41cb240f08aa19fe5b4c0ab86?pvs=4 

 

언리얼 엔진

Unreal Engine 5 C++ The Ultimate Game Developer Course

www.notion.so

※노션에 기존에 작성하던 글이 있으니 참고

 

이전 글에서는 무기의 히트박스를 활성화만 해 두었는데 이경우, 무기를 들고만 있어도 닿으면 히트가 됩니다. 그래서 공격애니메이션 몽타주가 실행될때만 히트박스가 활성화되도록 해 봅니다.

무기 클래스

이전 글에서 무기의 CollisionEnabled를 생성자에서 QueryOnly로 설정하였었는데 NoCollision으로 변경하여 평소에는 히트박스가 활성화되지 않게 합니다.

AWeapon::AWeapon()
{
	// 무기 히트박스
	WeaponBox = CreateDefaultSubobject<UBoxComponent>(TEXT("Weapon Box"));
	WeaponBox->SetupAttachment(GetRootComponent());
	WeaponBox->SetGenerateOverlapEvents(true);
	WeaponBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);    // <---수정된 부분
	WeaponBox->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Overlap);
	WeaponBox->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Ignore);

	BoxTraceStart = CreateDefaultSubobject<USceneComponent>(TEXT("BoxTraceStart"));
	BoxTraceStart->SetupAttachment(GetRootComponent());
	BoxTraceEnd = CreateDefaultSubobject<USceneComponent>(TEXT("BoxTraceEnd"));
	BoxTraceEnd->SetupAttachment(GetRootComponent());
}

그리고 히트박스를 만약 private또는 protected로 설정하였다면 Getter를 만들어 줍니다. 플레이어 캐릭터 클래스에서 히트박스를 호출해 사용할 것 입니다.

public:
	FORCEINLINE UBoxComponent* GetWeaponBox() const { return WeaponBox; }

플레이어 캐릭터 클래스

캐릭터 클래스에서 무기의 히트박스의 CollisionEnabled를 설정하는 함수를 만듭니다. BlueprintCallable로 만들어 줍니다.

public:
	UFUNCTION(BlueprintCallable)
	void SetWeaponCollsionEnable(ECollisionEnabled::Type CollisionEnabled);
void ABaseCharacter::SetWeaponCollsionEnable(ECollisionEnabled::Type CollisionEnabled)
{
	CurrentWeapon->GetWeaponBox()->SetCollisionEnabled(CollisionEnabled);
}

노티파이 설정

컴파일하고 블루프린트로 와서 공격 몽타주로 갑니다.

트랙에서 히트박스를 활성화 시킬 구간에 노티파이를 추가해 줍니다.

캐릭터의 애니메이션 블루프린트로 가서 노티파이가 호출될때 히트박스를 활성/비활성화 해 줍니다.

컴파일하고 실행해서 확인해 봅니다.

무기가 닿아도 히트박스가 응답하지 않음
공격시에는 활성화됨

반응형