인프런 커뮤니티 질문&답변

kr36님의 프로필 이미지
kr36

작성한 질문수

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템

3강 : 캐릭터의 입력 처리

ASC GiveAbility 질문드립니다.

해결된 질문

작성

·

214

·

수정됨

0

안녕하세요.

저는 무기 아이템 액터가 무기를 휘두르는 몽타주를 재생하는 어빌리티를 멤버 변수로 갖고 있게 하고,

해당 무기를 장착했을 때 무기의 어빌리티를 매개변수로 전달받아 어빌리티를 활성화 하도록 구현하려고 하는데요.

이 경우에 어빌리티를 활성화하고 등록된 어빌리티를 다시 제거해 줄 필요는 없을까요?

같은 무기를 여러번 장착할 수도 있을텐데 ASC에 같은 어빌리티 여러 개가 등록되어 있는게 문제가 될 수도 있지 않나 해서 질문드립니다.

답변 1

1

이득우님의 프로필 이미지
이득우
지식공유자

네 ASC가 관리하는 어빌리티 목록은 FGameplayAbilitySpec의 TArray 로 구성되어 있고, GiveAbility 함수에서는 별도의 중복체크는 없이 추가합니다.

FGameplayAbilitySpec& OwnedSpec = ActivatableAbilities.Items[ActivatableAbilities.Items.Add(Spec)];

따라서 중복을 피하고 싶다면 FindAbilitySpecFrom 계열의 함수를 사용해 해당 스펙이 있는지 미리 점검한 후 추가해주면 될 것 같습니다.
다만 이 경우 자료 구조가 TArray다보니 선형 탐색 O(N)이 일어나므로, 현재 ASC에 소유중인 어빌리티가 너무 많은 경우 별도의 Set이나 Map을 추가하는 것을 고려해보시면 되겠습니다.

kr36님의 프로필 이미지
kr36
질문자

답변 감사합니다.

kr36님의 프로필 이미지
kr36

작성한 질문수

질문하기