Unreal Engine 4 프로그래밍 c++/기능

UE4 c++ Material 접근하기.

코닥쿠 2023. 7. 6. 11:50
반응형

게임을 제작하다보면 해당 폰의 메시가 Fadeout되면서 사라지는 것도 연출하고 싶고 아니면 색깔을 변경하여 다른 느낌을 주고 싶을 것이다.

 

그래서 지금은 material을 적용방법은 안다고 가정하겠다.

Asset
Blueprint
Instance

(당연히 Material을 Opacity값을 변경하기 위해서는 Blend Mode를 Mask로 변경해야 한다.)

 

먼저 사진과 같이 먼저 값을 조정하는 파라미터를 먼저 있어야한다 (Fadeout이나 MissiveValue라는 스칼라값이나 ParticleColor와 같은 Vectro 값들을 변경하지만 지금은 Fadeout만 사용할것이다.)

 

이런식으로 Material이 준비되어있다고 가정하에 기본적으로 Scalar나 Vector에 접근 방법에 대해 코드를 작성했다.

기본적으로 해당 에셋에 도달하기 위해서는 UMaterialInterfaceUMaterialInstanceDynamic변수가 필요하다.

void ACharacterBase::Fadeout()
{

	UMaterialInterface* Material = LoadObject<UMaterialInterface>(nullptr, TEXT("/Game/Mannequin/Character/Materials/M_Male_Body"));
	UMaterialInstanceDynamic* DynamicMaterial = GetMesh()->CreateDynamicMaterialInstance(0, Material);
	if (DynamicMaterial)
	{
		DynamicMaterial->SetVectorParameterValue("Fadeout", 0.5f);
	}
}

먼저

UMaterialInterface  : 자기가 사용하는 메쉬의 MaterialAsset을 가져왔다고 생각하면 된다. 그래서 LoadObject으로 해당에셋의 콘텐츠 주소를 가져와 적용하면 해당 Material이 객체를 생성하게 된다.

그 다음

 

UMaterialInterface

 

docs.unrealengine.com

UMaterialInstanceDynamic  :  이제 자신이 사용하는 메쉬(그래서 GetMesh() 함수를 사용한것을 볼 수 있다.)에서 아래 사진과 같이 메쉬의 해당 Material과 같은 0번 인덱스의 원소를 사용할 수 있게 가져오는 것이며 해당 할당된 원소에 접근하여 값을 변경할 수 있게 하는 객체인것이다.

 

UMaterialInstanceDynamic

 

docs.unrealengine.com

 

(여기서 중요한점은 지금 위에 코드는 0번이라고 설정했지만 0, 1이런식의 있는 경우에는 0번의 원소만 적용할 경우에는 부분으로만 적용되기 때문에 0, 1 원소까지 접근하여 값을 변경해야 전체가 같이 변경되는걸 알 수 있다.)

 

 

(지금은 설명을 위한 편의를 위해 0번만 접근한다고 가정하에 작성한 것이다. 그래서 그냥 이런식으로 접근하여 값을 변경하고 아니면 아래 코드와 같이 다르게 값을 가져올 수도 있는 것이다.)

UMaterialInterface* Material = LoadObject<UMaterialInterface>(nullptr, TEXT("/Game/Mannequin/Character/Materials/M_Male_Body"));
UMaterialInstanceDynamic* DynamicMaterial = GetMesh()->CreateDynamicMaterialInstance(0, Material);
    
float Fadeout = 0.f;
FHashedMaterialParameterInfo ParamInfo("Fadeout");
DynamicMaterial->GetScalarParameterValue(ParamInfo, Fadeout);

 

그래서 해당 함수로 0.5f 값으로 설정한 후 실행하면 다음과 같이 나온다.

 

반응형