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를 보면 머티리얼의 색상이 랜덤하게 계속해서 바뀌는 것을 확인할 수 있다.

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts