반응형

GameplayEffect 2

[UE] PreAttributeChange가 아니라 PostGameplayEffectExecute에서 Clamp 해야 하는 이유

불에 들어가면 HP가 감소해야 하는데 감소하지 않는 것을 볼 수 있다.이유는 지금 HP에 대한 Clamp 처리를 PreAttributeChange에서 해주고 있기 때문이다 왜 PreAttributeChange에서 해주면 문제가 되는걸까찾아보니 PreAttributeChange는 BaseValue가 바뀐 직후, CurrentValue는 바뀌기 전에 호출된다고 하더라 못믿겠어서 엔진 코드를 직접 찾아봤다진짜로 PreAttributeChange 이전 콜스택에 FActiveGameplayEffectsContainer::SetAttributeBaseValue 함수 내부에서 BaseValue를 먼저 세팅한 후에 PreAttributeChange를 호출해주고 있었다. 그럼 왜 CurrentValue를 바꾸기 전에 C..

공부/UE 2025.11.02

[UE] GameplayEffect의 Stack 여부에 따른 Tag 중첩

Q) 왜 Stack이 쌓이는 GE는 Tag가 중첩되지 않지만, Stack이 쌓이지 않는 GE는 Tag가 중첩될까? A) Stack이 쌓이는 GE를 찾아서(FindStackableActiveGameplayEffect) 있으면 해당 GE에 스택만 변경, 없으면 FActiveGameplayEffect 새로 만들어서 태그 및 스택 변경 만약 FindExistingActiveGameplayEffect로 스택 가능한 GE가 없으면 새로운 FActiveGameplayEffect를 만든다 만약 스택 가능한 GE가 없으면 새로 만든 FActiveGameplayEffect를 인자로 넘기는 InternalOnActiveGameplayEffectAdded를 호출해준다. 내부에서 UpdateTagMap으로 GrantedTag..

공부/UE 2025.10.20
반응형