본문 바로가기

게임프로그래밍/실습2

[실습2] 49. Set by Coller로 데미지 설정하기

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());

 

값은 이렇게 가져올 수 있다. 레벨에 따른 데미지를 가져오는 방식이다.

 

아직 레벨을 설정하지는 않았다. 이것은 나중에 해야하는 작업이다.