* 설계
결론 : c++에서 죽을때, 머테리얼을 바꾸고, Dissiolve 값을 스무스하게 바꿔주면 된다.
* 구현
UCLASS(Abstract) //추상클래스임
class AURA_API AAuraCharacterBase : public ACharacter, public IAbilitySystemInterface, public ICombatInterface
{
...
/* 용해 Effect*/
void Dissolve(); //머테리얼을 교체하는 함수
UFUNCTION(BlueprintImplementableEvent) //타임라인설정하는 함수, BP에서 구현
void StartDissolveTimeLine(UMaterialInstanceDynamic* DynamicMaterialInstance);
UPROPERTY(EditAnywhere,BlueprintReadOnly)
TObjectPtr<UMaterialInstance> DissolveMaterialInstance; //매쉬용 머테리얼
UPROPERTY(EditAnywhere,BlueprintReadOnly)
TObjectPtr<UMaterialInstance> WeaponDissolveMaterialInstance; //무기용 머테리얼
void AAuraCharacterBase::Dissolve()
{
if(IsValid(DissolveMaterialInstance))
{
//새로운 머테리얼만들고
UMaterialInstanceDynamic* DynamicMatInst = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
GetMesh()->SetMaterial(0,DynamicMatInst); //설정
StartDissolveTimeLine(DynamicMatInst);
}
if(IsValid(WeaponDissolveMaterialInstance))
{
//새로운 머테리얼만들고
UMaterialInstanceDynamic* DynamicMatInst = UMaterialInstanceDynamic::Create(WeaponDissolveMaterialInstance, this);
Weapon->SetMaterial(0,DynamicMatInst); //설정
StartDissolveTimeLine(DynamicMatInst);
}
}
- 데스함수에서 용해효과 호출
void AAuraCharacterBase::MulticastHandleDeath_Implementation()
{
...
//용해효과 실행
Dissolve();
}
* 타임라인 => Dissolve 값 바꾸기
- 변수로만든 머테리얼에 의존성 주입
UPROPERTY(EditAnywhere,BlueprintReadOnly)
TObjectPtr<UMaterialInstance> DissolveMaterialInstance; //녹을때 매쉬용 머테리얼
UPROPERTY(EditAnywhere,BlueprintReadOnly)
TObjectPtr<UMaterialInstance> WeaponDissolveMaterialInstance; //녹을때 무기용 머테리얼
- 원인 : 타임라인 공유가 안됨
- 해결 : 무기용 으로 하나 만들고 각각실행 해야함
UFUNCTION(BlueprintImplementableEvent) //타임라인설정하는 함수, BP에서 구현
void StartDissolveTimeLine(UMaterialInstanceDynamic* DynamicMaterialInstance);
UFUNCTION(BlueprintImplementableEvent) //타임라인설정하는 함수, BP에서 구현
void StartWeaponDissolveTimeLine(UMaterialInstanceDynamic* DynamicMaterialInstance);
void AAuraCharacterBase::Dissolve()
{
if(IsValid(DissolveMaterialInstance))
{
//새로운 머테리얼만들고
UMaterialInstanceDynamic* DynamicMatInst = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
GetMesh()->SetMaterial(0,DynamicMatInst); //설정
StartDissolveTimeLine(DynamicMatInst);
}
if(IsValid(WeaponDissolveMaterialInstance))
{
//새로운 머테리얼만들고
UMaterialInstanceDynamic* DynamicMatInst = UMaterialInstanceDynamic::Create(WeaponDissolveMaterialInstance, this);
Weapon->SetMaterial(0,DynamicMatInst); //설정
StartWeaponDissolveTimeLine(DynamicMatInst);
}
}
'UE5 > Damage' 카테고리의 다른 글
[UE5] 실행 계산 개념, 아머속성 계산-변경 구현 (0) | 2024.06.23 |
---|---|
[UE5] 맞은적 머리위에 데미지 뜨도록 구현 (0) | 2024.06.23 |
[UE5] 적 죽음 구현 (0) | 2024.06.23 |
[UE5] 타격시 에니메이션 구현 (0) | 2024.06.23 |
[UE5] json으로 레벨별 데미지 구현 (0) | 2024.06.23 |