1. 게임플레이 이펙트의 수정자 매그니튜드를 Set by Coller로 교체하기
현재 발사체는 게임플레이 이펙트의 도움 덕분에 데미지를 정할 수 있다. 하지만 발사체 마다 다양한 데미지 공식을 적용하고 싶다면 (가령 파이어볼에는 불속성, 아이스볼에는 얼음속성을 지정할 수 있다) 게임플레이 이펙트가 아닌 발사체 자체, 즉 어빌리티가 데미지를 설정할 수 있어야 한다.
그리고 이렇게 설정한 데미지를 게임플레이 이펙트에 설정한다.
Set by Coller는 키-밸류로 연결되어있는데 이 키의 값은 게임플레이 태그이다. 게임 플레이 태그를 더 추가해야할 것이다.
아래와 같이 사용하여 값을 지정할 수 있다. 키-밸류 페어가 설정되었는데 키는 게임플레이태그, 밸류는 데미지(현재는 하드코딩한 50)이다.
FAuraGameplayTags GameplayTags = FAuraGameplayTags::Get();
UAbilitySystemBlueprintLibrary::AssignTagSetByCallerMagnitude(SpecHandle, GameplayTags.Damage, 50.f);
이제 수정자에서 이에 접근하는 방법을 알아보자.
이렇게 태그를 설정할 수 있고 그러면 이제 설정된 매그니튜드가 호출될 것이다. 이제 이 값을 하드코딩하는 것이 아니라 따로 지정할 수 있어야 할 것이다.
2. 데미지 지정하기
데미지를 하드 코딩하는 대신 커브 테이블을 이용해 설정하는 방법을 알아보자. 베이스 어빌리티에 이 변수를 설정할 것이다.
어빌리티 중에는 데미지를 입히지 않는 어빌리티도 많겠지만 이 변수가 차지하는 메모리 양이 그리 많지 않아 이렇게 설정해도 괜찮다고 한다.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Damage")
FScalableFloat Damage;
이렇게 변수를 선언하면 커브테이블을 통해 값을 매길 수 있다.
이제 이 값을 데미지를 줄때 사용하면 된다.
const float ScaledDamage = Damage.GetValueAtLevel(GetAbilityLevel());
값은 이렇게 가져올 수 있다. 레벨에 따른 데미지를 가져오는 방식이다.
아직 레벨을 설정하지는 않았다. 이것은 나중에 해야하는 작업이다.
'게임프로그래밍 > 실습2' 카테고리의 다른 글
[실습2] 51. UGameplayEffectExecutionCalculation 클래스 (0) | 2024.12.06 |
---|---|
[실습2] 50. 에너미가 죽을때 디졸브 적용하기 (0) | 2024.12.06 |
[실습2] 48. 메타 어트리뷰트 (0) | 2024.12.05 |
[실습2] 47. 발사체에 대미지 부여 효과를 주는 게임플레이 이펙트 적용하기 (0) | 2024.12.04 |
[실습2] 46. 서버에서 타겟 데이터 수신하기 (0) | 2024.12.04 |