C++ 코드에서 머티리얼 인스턴스 다이내믹을 생성하고 다루기
작성 기준 버전 :: 4.21.1
이번 섹션에서는 C++ 코드에서 머티리얼 인스턴스 다이내믹을 생성하고 다루는 방법에 대해서 알아본다.
들어가기에 앞서 머티리얼 인스턴스 다이내믹에 대해서 알지 못하는 사람이라면 다음 링크를 통해서 학습하고 진행하면 된다.
머티리얼 인스턴싱 :: 머티리얼 파라미터와 머티리얼 인스턴스
머티리얼 생성
코드에서 머티리얼 인스턴스 다이내믹을 다루기 전에, 기초가 될 머티리얼을 생성하자. 콘텐츠 브라우저 패널에서 신규 추가 버튼을 누르고 머티리얼을 선택한다. 새 머티리얼의 이름은 TestMaterial로 한다.
생성된 머티리얼을 더블클릭해서 머티리얼 에디터를 열고 머티리얼 그래프에 다음과 같이 머티리얼 파라미터를 추가하고 연결한다.
머티리얼 파라미터를 모두 추가했다면, 적용 버튼을 누르고 저장한 뒤에 머티리얼 에디터를 닫는다. 그 다음 TestMaterial을 우클릭하고 머티리얼 인스턴스 생성을 선택해서 TestMaterial의 머티리얼 인스턴스를 생성한다.
생성된 머티리얼 인스턴스를 더블클릭해서 머티리얼 인스턴스 에디터를 열고 디테일 패널에서 Color 머티리얼 파라미터의 체크박스를 체크한 뒤 저장하고 머티리얼 인스턴스 에디터를 닫는다.
C++ 코드에서의 머티리얼 인스턴스 다이내믹
머티리얼 세팅을 끝냈으니 이제 머티리얼 인스턴스 다이내믹을 사용해볼 C++ 코드를 작성해보자.
우선 새 C++ 클래스를 추가한다. 부모 클래스로는 Actor 클래스를 선택한다.
클래스의 이름은 DynamicMaterialActor로 한다.
클래스 생성이 모두 끝나면 비주얼 스튜디오로 가서 DynamicMaterialActor.h의 클래스 선언에 다음 멤버 변수를 추가한다.
UPROPERTY(EditAnywhere)
class UStaticMeshComponent* DynamicMaterialMesh;
그리고 DynamicMaterialActor.cpp로 가서 UStaticMeshComponent의 기능을 사용하기 위해서 다음 전처리기를 추가한다.
#include "Engine/Classes/Components/StaticMeshComponent.h"
그 다음 ADynamicMaterialActor::ADynamicMaterialActor() 생성자 함수에 DynamicMaterailMesh를 초기화하는 함수를 추가한다.
DynamicMaterialMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("DynamicMaterialMesh"));
DynamicMaterialMesh->CreateDynamicMaterialInstance(0);
CreateDynamicMaterialInstance() 함수가 DynamicMaterialMesh에게 머티리얼 인스턴스 다이내믹을 만들어준다.
그 다음엔 초마다 머티리얼의 색상을 바꿔주기 위해서 DynamicMaterialActor.h로 가서 클래스 선언에 다음 멤버 변수들을 추가한다.
float RunningTime;
FVector PrevColor;
FVector NextColor;
그리고 DynamicMaterialActor.cpp로 가서 Tick() 함수를 다음과 같이 수정한다.
void ADynamicMaterialActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
RunningTime += DeltaTime;
FVector ChangeColor = FVector(FMath::Lerp(PrevColor.X, NextColor.X, RunningTime), FMath::Lerp(PrevColor.Y, NextColor.Y, RunningTime), FMath::Lerp(PrevColor.Z, NextColor.Z, RunningTime));
DynamicMaterialMesh->SetVectorParameterValueOnMaterials(TEXT("Color"), ChangeColor);
if (RunningTime >= 1.0f)
{
PrevColor = NextColor;
NextColor = FVector(FMath::RandRange(0.0f, 1.0f), FMath::RandRange(0.0f, 1.0f), FMath::RandRange(0.0f, 1.0f));
RunningTime = 0.0f;
}
}
코드 작성을 모두 마친 다음 솔루션 탐색기에서 프로젝트를 빌드한 뒤, 언리얼 에디터로 돌아간다.
머티리얼 인스턴스 다이내믹 C++ 코드 테스트
컴파일이 끝나면 레벨 에디터에 DynamicMaterialActor를 배치하고 디테일 패널에서 DynamicMaterialMesh에 적당한 메시를 할당한 다음 머티리얼을 TestMaterial_Inst로 설정한다.
그리고 플레이 버튼을 눌러서 PIE 모드에서 DynamicMaterialActor를 보면 머티리얼의 색상이 랜덤하게 계속해서 바뀌는 것을 확인할 수 있다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Unreal Engine4 > Materials' 카테고리의 다른 글
[UE4] Materials - 머티리얼 인스턴싱 :: 머티리얼 파라미터와 머티리얼 인스턴스 (0) | 2018.12.17 |
---|---|
[UE4] Materials - Translucent 모드에서 Metallic, Specular, Roughness 사용법 (0) | 2018.12.13 |