0. 개요

몬스터가 사망하면 부식되어 사라지는 것처럼 보이는 효과를 추가할 것이다.

 

 

1. 디졸브 이펙트 - M_GoblinDissolve

해당 이펙트의 Dissolve 매개 변수를 사용하면 변수 값이 증가함에 따라 시체가 녹는 것처럼 보이게 된다.

 

(1) 동적 머티리얼 인스턴스(Dynamic Material Instance) - AuraCharacterBase

런타임 시 매개변수가 동적으로 변경될 수 있는 머티리얼 인스턴스를 말한다.

 

	// 디졸브 이펙트
	void Dissolve();

	UFUNCTION(BlueprintImplementableEvent)
	void StartDissolveTimeline(UMaterialInstanceDynamic* DynamicMaterialInstance);

	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	TObjectPtr<UMaterialInstance> DissolveMaterialInstance;

	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	TObjectPtr<UMaterialInstance> WeaponDissolveMaterialInstance;

타임라인을 이용한 함수는 블루프린트에서 구현하는 것이 용이하므로 블루프린트에서 정의할 수 있도록 지정한다.

 

void AAuraCharacterBase::Dissolve()
{
	// 메시 디졸브
	if (IsValid(DissolveMaterialInstance))
	{
		// 동적 머티리얼 인스턴스 생성
		UMaterialInstanceDynamic* DynamicMI = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
		
		// 메시에 머티리얼 적용
		GetMesh()->SetMaterial(0, DynamicMI);

		// 타임라인 실행
		StartDissolveTimeline(DynamicMI);
	}

	// 무기 디졸브
	if (IsValid(WeaponDissolveMaterialInstance))
	{
		// 동적 머티리얼 인스턴스 생성
		UMaterialInstanceDynamic* DynamicMI = UMaterialInstanceDynamic::Create(WeaponDissolveMaterialInstance, this);

		// 메시에 머티리얼 적용
		Weapon->SetMaterial(0, DynamicMI);

		// 타임라인 실행
		StartDissolveTimeline(DynamicMI);
	}
}

캐릭터 메시와 무기에 대해 디졸브 동적 머티리얼 인스턴스를 생성해 적용한다.

 

void AAuraCharacterBase::MulticastHandleDeath_Implementation()
{
	// 무기 랙돌
	Weapon->SetSimulatePhysics(true);
	Weapon->SetEnableGravity(true);
	Weapon->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);

	// 캐릭터 랙돌
	GetMesh()->SetSimulatePhysics(true);
	GetMesh()->SetEnableGravity(true);
	GetMesh()->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
	GetMesh()->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Block); // worldstatic에 대해 부딫힘

	// 캐릭터 충돌 비활성화
	GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
	Dissolve();
}

디졸브 함수는 사망 처리에서 호출한다.

 

 

(2) 이벤트와 타임라인 - BP_EnemyBase

시간에 따라 Dissolve 매개변수를 증가시킬 것이다. Dissolve의 최댓값은 0.55이다.

타임라인을 생성하고 이름을 Dissolve Timeline로 변경 후 더블클릭한다.

트랙을 추가하여 이름을 변경하고 두 개의 키를 추가한다.

처음 시작 값은 -0.1이고 3초 뒤에 디졸브가 완전히 실행된 값인 0.55로 지정한다.

 

 

(3) 블루프린트 - BP_EnemyBase

위와 같이 노드를 연결한다.

 

 

 

(4) 블루프린트 - BP_Goblin_Spear, BP_Goblin_Slingshot

클래스 디폴트를 클릭하고 몬스터 별로 디테일 창에서 디졸브 머티리얼 인스턴스를 선택한다.