1. 창 고블린

(1) 걸음 소리 추가하기

창 고블린의 발이 땅에 닿는 순간에 사운드 노티파이를 이용하여 발소리를 출력한다.

창 고블린이 많아지면 발소리가 중첩되어 시끄러워질 수 있으므로 음량을 낮춘 버전을 만들 것이다.

그래프의 VolumeMultiplier 변수를 선택하고 디폴트 값을 줄인다.

고블린의 발이 땅에 닿을 때 사운드 노티파이를 추가한다.

 

 

(2) 창 찌르는 소리 추가하기

위의 메타사운드 템플릿을 사용하고 InputArray에 소리를 추가하면 랜덤으로 창 찌르는 소리를 낼 수 있다.

 

창 고블린의 공격 몽타주에 사운드 노티파이를 추가한다.

 

 

2. 타격 이펙트

근접 공격에 맞은 대상에게 이펙트를 추가할 것이다.

 

(1) CombatInterface - 전투 인터페이스

	UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
	UNiagaraSystem* GetBloodEffect();
};

이 블루프린트 Native 이벤트 함수는 AuraCharacterBase에서 정의한다.

 

 

(2) AuraCharacterBase에서 GetBloodEffect 정의하기

	// 혈흔 효과
	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	UNiagaraSystem* BloodEffect;
	virtual UNiagaraSystem* GetBloodEffect_Implementation() override;
UNiagaraSystem* AAuraCharacterBase::GetBloodEffect_Implementation()
{
	return BloodEffect;
}

 

 

(3) 타격 사운드 추가

(3-1) CombatInterface에서 FTaggedMontage 구조체 수정

이 구조체를 수정하여 구조체에서 타격 사운드를 가져올 수 있게 한다.

USTRUCT(BlueprintType)
struct FTaggedMontage
{
	GENERATED_BODY()

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	UAnimMontage* Montage = nullptr;

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FGameplayTag MontageTag;

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	USoundBase* ImpactSound = nullptr;
};

 

 

3. 블루프린트 수정

(1) AuraCharacter와 EnemyBase에 대해 Blood Effect 클래스 지정

 

 

(2) BP_Goblin_Spear에 타격 사운드 추가

메타사운드 템플릿을 이용하여 만든 후 TaggedMontage의 Impact Sound에 넣어준다.

 

 

(3) GA_MeleeAttack에서 타격 사운드 재생

Tagged Montage로 부터 사운드를 가져오고, Get Socket Location에서 소켓 위치를 가져와 Play Sound at Location 노드에 연결한다.

새로운 불리언을 사용해 타겟이 적중했음을 판단하고 적중했을 때만 사운드를 출력하게 되어있다.

 

 

(4) 혈흔 효과 생성

CombatInterface와 AuraCharacterBase에서 구현했던 Get Blood Effect 함수를 사용하여 나이아가라 시스템 포인터를 가져와 Spawn System at Location을 이용해 출력한다.

 


- 인스턴싱 정책과 멤버 변수

Instanced Per Actor로 설정되어 있기 때문에, 액터 별 인스턴스가 한 개만 사용된다.

따라서 인스턴스 별로 멤버 변수가 있기 때문에 멤버 변수의 유효성은 확보된 셈이다.

 

Non Instanced는 인스턴스를 사용하지 않는 정책으로 CDO(Class Default Object)만 해당 어빌리티를 활성화 시킬 수 있다. 따라서 상태를 가질 수 없다.

 

Instanced Per Execution은 어빌리티가 실행될 때마다 인스턴스를 생성하여 사용한다. 중첩되는 상황에 사용한다.

 

GA_MeleeAttack에 대해 액터 별 인스턴스를 하나만 만들기로 했기 때문에, Instanced Per Actor의 특징 상 한 액터의 멤버 변수가 유지된다. 따라서 어빌리티가 다시 발동되어도 멤버 변수의 값이 유지될 것이므로, 아래와 같이 타격 판단 불리언과 같은 멤버변수는 주의하여서 초기화하여야 한다.