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
※노션에 기존에 작성하던 글이 있으니 참고
이전까지 글을 따라왔다면, 아마 적캐릭터의 메시에따라 다를텐데 한번공격할때 여러번 히트가 되는 다단히트 현상을 겪으신 분들이 있을겁니다. 그 이유는 'BegineOverlap'을 사용하기 때문인데 요컨데 적 캐릭터의 메시에서 공격이 지나가면서 Overlap을 한번 빠져나갔다가 다시 Overlap되었기 때문에 발생하는 현상입니다. 이것을 한번 고쳐보겠습니다.
무기 클래스
이전 글을 따라왔다면 OnBoxOverlap함수에서 ActorsToIgnore를 선언하고 this(무기)만 배열에 넣고 박스트레이스에서 활용되었다는걸 알 수 있습니다.이 ActorsToIgnore배열에 한번 닿았던 적을 추가로 넣어 공격이 끝날때 초기화시키는 방식으로 메커니즘이 이루어 질 것 입니다.
먼저 배열을 추가해 줍니다.
public:
TArray<AActor*> IgnoreActors;
이제 OnBoxOverlap 함수를 수정해 줍니다.
void AWeapon::OnBoxOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
const FVector Start = BoxTraceStart->GetComponentLocation();
const FVector End = BoxTraceEnd->GetComponentLocation();
TArray<AActor*> ActorsToIgnore;
ActorsToIgnore.Add(this);
//수정된 부분
for (AActor* Actor : IgnoreActors)
{
ActorsToIgnore.AddUnique(Actor);
}
//
FHitResult BoxHit;
UKismetSystemLibrary::BoxTraceSingle(
this,
Start,
End,
FVector(5.f, 5.f, 5.f),
BoxTraceStart->GetComponentRotation(),
ETraceTypeQuery::TraceTypeQuery1,
false,
ActorsToIgnore,
EDrawDebugTrace::ForDuration,
BoxHit,
true
);
// 수정된 부분
if (BoxHit.GetActor())
{
IgnoreActors.AddUnique(BoxHit.GetActor());
}
}
플레이어 캐릭터 클래스
캐릭터 클래스로 와서 공격을 시작할때 무기 클래스의 IgnoreActors배열을 초기화해주는 코드를 만들어 줍니다.
void ABaseCharacter::SetWeaponCollsionEnable(ECollisionEnabled::Type CollisionEnabled)
{
if (CurrentWeapon != nullptr && CurrentWeapon->GetWeaponBox() != nullptr)
{
CurrentWeapon->GetWeaponBox()->SetCollisionEnabled(CollisionEnabled);
CurrentWeapon->IgnoreActors.Empty(); // 초기화
}
}
컴파일하고 실행해서 확인해 봅니다.
'언리얼 엔진 > 기초' 카테고리의 다른 글
[Unreal Engine5] 디버깅 (0) | 2023.08.24 |
---|---|
[Unreal Engine5] 무기 매커니즘 만들기(2) - 공격시에만 무기 히트박스 활성화 (0) | 2023.08.24 |
[Unreal Engine5] 무기 매커니즘 만들기(1) - Box Trace (0) | 2023.08.24 |
[Unreal Engine5] 이동 + 공격 상하체 따로 움직이기(Layered blend per bone) (0) | 2023.08.23 |
[Unreal Engine5] C++에서 몽타주(Montage) 플레이하기 (0) | 2023.08.23 |