해결된 질문
작성
·
214
·
수정됨
0
안녕하세요.
저는 무기 아이템 액터가 무기를 휘두르는 몽타주를 재생하는 어빌리티를 멤버 변수로 갖고 있게 하고,
해당 무기를 장착했을 때 무기의 어빌리티를 매개변수로 전달받아 어빌리티를 활성화 하도록 구현하려고 하는데요.
이 경우에 어빌리티를 활성화하고 등록된 어빌리티를 다시 제거해 줄 필요는 없을까요?
같은 무기를 여러번 장착할 수도 있을텐데 ASC에 같은 어빌리티 여러 개가 등록되어 있는게 문제가 될 수도 있지 않나 해서 질문드립니다.
답변 1
1
네 ASC가 관리하는 어빌리티 목록은 FGameplayAbilitySpec의 TArray 로 구성되어 있고, GiveAbility 함수에서는 별도의 중복체크는 없이 추가합니다.
FGameplayAbilitySpec& OwnedSpec = ActivatableAbilities.Items[ActivatableAbilities.Items.Add(Spec)];
따라서 중복을 피하고 싶다면 FindAbilitySpecFrom 계열의 함수를 사용해 해당 스펙이 있는지 미리 점검한 후 추가해주면 될 것 같습니다.
다만 이 경우 자료 구조가 TArray다보니 선형 탐색 O(N)이 일어나므로, 현재 ASC에 소유중인 어빌리티가 너무 많은 경우 별도의 Set이나 Map을 추가하는 것을 고려해보시면 되겠습니다.
답변 감사합니다.