1. 몬스터 파이어볼트 각도

몬스터가 발사하는 파이어볼트가 높이 날아가는 버그가 있다.

몬스터의 파이어볼트는 GA_EnemyFirebolt를 사용하고 있으며, 이 파이어볼트의 부모 어빌리티는 GA_RangedAttack이다.

따라서 GA_RangedAttack에서 각도 변환 불리언과 값을 멤버 변수로 만들어 자손에게 노출시키면 클래스 디폴트에서 발사 각도를 변경할지 선택할 수 있게 된다.

변수로 승격하고 눈 아이콘을 눌러 자손의 블루프린트에 노출한다.

GA_RangedAttack을 상속받는 원거리 공격 중 각도를 변화시키고 싶지 않은 어빌리티에 대해 클래스 디폴트 값을 수정한다.

 

 

2. 원거리 데몬의 메모리 누수

원거리 공격 데몬이 돌을 던질수록 점점 FPS가 낮아진다.

하나의 데몬이 여러 개의 돌을 소환하고 있다.

이는 이벤트를 여러 번 발동하고 있기 때문이다.

 

(1) 해결 방법Ⅰ- 이벤트 1회만 발동

Wait Gameplay Event 노드의 Only Trigger Once 불리언에 체크한다.

 

위의 방법 이후로도 메모리 누수가 지속되고 있다.

이는 돌이 폭발하는 파티클의 수명이 무한대로 설정되어 있기 때문이다.

 

(2) 해결 방법Ⅱ - NS_SlingshotImpact 파티클 수명 설정

파티클 상태 옆의 무한대 표시를 보아 파티클의 수명이 무한대임을 알 수 있다.

Particale State를 눌러 Kill Particles When Lifetime Has Elapsed(수명이 끝난 파티클 제거)에 체크한다.

 

 

3. 원거리 공격 오류 디버그

적이 원거리 공격할 때마다 GE_Damage 클래스 내의 GameplayEffectSpec의 GetMagnitude 함수가 오류를 발생하고 있다.

원거리 공격의 타입이 Physical로 설정되어 있어 다른 속성에 대한 데미지를 가져올 필요가 없다.

ExecCalc_Damage 클래스의 데미지 계산식을 보면 Magnitude를 찾지 못하면 오류를 발생하는 불리언이 기본으로 True로 되어있다.

	// Set by Caller Magnitude 가져오기
	float Damage = 0.f;
	for (auto& Pair : FAuraGameplayTags::Get().DamageTypesToResistances)
	{
		const FGameplayTag DamageTypeTag = Pair.Key;
		const FGameplayTag ResistanceTag = Pair.Value;

		checkf(AuraDamageStatics().TagsToCaptureDefs.Contains(ResistanceTag), TEXT("ExecCalc_Damage TagsToCaptureDefs [%s] Tag Missing"), *ResistanceTag.ToString());
		const FGameplayEffectAttributeCaptureDefinition CaptureDef = AuraDamageStatics().TagsToCaptureDefs[ResistanceTag];

		float DamageTypeValue = Spec.GetSetByCallerMagnitude(DamageTypeTag, false);
		if (DamageTypeValue <= 0.f)
			continue;

DamageTypeValue에서 SetByCallerMagnitude를 가져올 때 오류를 발생하지 않도록 false를 추가한다.