TIL

Kyu_·2026년 7월 21일

35주차

목록 보기
2/3

점프 파츠 먹었을때 한번만 먹기만 하면 게임 끝 다음 아웃런갈때까지도 무조건 점프가 여러번됨 이게 안없어지는 버그

예상

RemoveGEForSlot부분이 있는데 여기서

if (UAbilitySystemComponent* ASC = GetOwnerASC()){
    ASC->RemoveActiveGameplayEffect(*Handle);
}
ActiveGEHandles.Remove(Slot);

GetOwnerASC()는 PS->GetPawn()이 유효할때만 ASC를 반환하는데 그 순간 ASC를 못 찾으면 RemoveActiveGameplayEffect는 호출 안되고도 핸들 기록(ActiveGEHandles.Remove(Slot))은 그냥 지워짐. 그러면 그 Infinite GE는 ASC에 영원히 남고, 이걸 평생 지울 방법도 없기때문에 그냥 계속 지속되는게 아닐까? 추정

가드패턴 하나더?

ClearAll에서 GE를 없앨때 지금은 장착된 장비기준으로 정리했지만 ActiveGEHandles에 남아있는 모든 슬롯을 기준으로 정리하는식으로 교체?? -> 만약에 이게 가능하다면 이미 교체되어서 없는 고아핸들들도 강제로 청소할 수 있게된다.

교체

UNSPartEquipComponent::ClearAll에서

TArray<FGameplayTag> HandleSlots;
ActiveGEHandles.GetKeys(HandleSlots);
for (const FGameplayTag& Slot : HandleSlots)
{
    RemovePartEffects(Slot);
}
for (const FGameplayTag& Slot : ClearedSlots)
{
    RemovePartEffects(Slot);
}

이런식으로 추가하지않을까 싶음

0개의 댓글