UE4 Dynamic Material Instance에 대한 메모
11545 단어 위 4UnrealEngine4UnrealC++
개요
UnrealEngine의 동적 머티리얼 인스턴스 및 머티리얼 파라미터에 대한 메모
업데이트 내역
날짜
내용
2020/04/18
머티리얼 파라미터의 취득, 테스크처 파라미터에 대해서 추기
환경
Windows10
Visual Studio 2017
UnrealEngine 4.24
참고
다음을 참고로 해 주셔서 감사합니다.
UE4 공식 : 머티리얼 파라미터 생성 방법
UE4 공식: 인스턴스화 머티리얼
UE4에서 동적 머티리얼 인스턴스를 시도했습니다.
UE4 머티리얼을 사용하여 깜박임 데미지 리액션 구현
UE4/C++: 메쉬의 머티리얼이나 텍스처를 C++ 코드로 제어하는 방법
UE4/C++: "UMaterialInstance::GetVectorParameterValue" 사양 변경 및 "Material Layers"
머티리얼에 파라미터 설정하기
머티리얼을 열고 편집기의 파라미터 -> ScalarParameter 또는 VectorParameter를 선택하여 적용할 파라미터로 설정합니다. 다른 계산(텍스처 컬러와의 가산 등)은 별도로 실시합니다.
BP로 액세스
동적 머티리얼 인스턴스 생성
메쉬에서 동적 머티리얼 인스턴스를 만들고 변수MID
에 보관합니다. 생성자나 BeginPlay 로 합니다.
매개변수 넣기
보유한 변수MID
에 대해 매개변수를 설정합니다. 스칼라 파라미터와 벡터 파라미터를 넣고 있습니다.
텍스처 파라미터를 넣는 경우는 다음과 같습니다. Value
에 텍스처 자산을 지정합니다.
C++로 액세스
동적 머티리얼 인스턴스 만들기
대상 메쉬에 설정된 머티리얼 슬롯에서 동적 머티리얼 인스턴스를 생성합니다.
아래 코드 예.
MyAnimInstance.cpp#include "Materials/MaterialInstanceDynamic.h"
void UMyAnimInstance::NativeBeginPlay()
{
class UMaterialInstanceDynamic* _MID = nullptr;
// スロット名からインデックスに
int32 _SlotIndex = GetSkeletalMeshComponent()->GetMaterialIndex(TEXT("SlotName"));
// ダイナミックマテリアルインスタンスを作成
_MID = GetSkeletalMeshComponent()->CreateDynamicMaterialInstance(_SlotIndex);
// 作成したダイナミックマテリアルインスタンスを保持
MID = _MID;
}
매개변수 넣기
작성한 동적 머티리얼 인스턴스에 매개변수를 설정합니다.
아래 코드 예
MyAnimInstance.cpp
class UMaterialInstanceDynamic* _MID; // 設定対象のマテリアルインスタンス
if(_MID){
// MIDのスカラーパラメータを設定する
_MID->SetScalarParameterValue(TEXT("Speed"), 2.0f);
// MIDのベクターパラメータを設定する
_MID->SetVectorParameterValue(TEXT("Color"), FLinearColor(1.0f, 0.0f, 0.0f));
}
파라미터 지우기
외부 설정을 한 파라미터를 클리어합니다. 매개 변수별로 지울 것 같은 것은없는 것 같습니다.
.cppclass UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
if(_MID){
// 設定したパラメータを全部クリアする
_MID->ClearParameterValues();
}
머티리얼 파라미터 얻기
스칼라 파라미터, 벡터 파라미터, 텍스처 파라미터 등 머티리얼이 가지고 있는 파라미터에 대해서 이하 C++ 코드 예.
머티리얼의 스칼라 파라미터 이름 얻기
.cpp
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
TArray<FMaterialParameterInfo> _ParamInfo;
TArray<FGuid> _ParamIds;
_Mt.MaterialInterface->GetAllScalarParameterInfo(_ParamInfo, _ParamIds);
// スカラーパラメータを全部表示
for (int _Lp=0;_Lp<_ParamInfo.Num();_Lp++){
UE_LOG(LogTemp, Log, TEXT("%s"), *_ParamInfo[_Lp].Name.ToString());
}
}
머티리얼의 특정 스칼라 파라미터 값 얻기
.cpp// スケルタルメッシュのマテリアルパラメータ "TestParam" を取得する
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
float _Buff = 0.0f;
bool _Ret = _Mt.MaterialInterface->GetScalarParameterValue(FName("TestParam"), _Buff);
if(_Ret){
// マテリアル名とパラメータ値を表示
UE_LOG(LogTemp, Log, TEXT("%s, %f"), *_Mt.MaterialSlotName.ToString(), _Buff);
}
}
텍스처 파라미터 설정
설정하는 텍스처는 별도로 로드하지 않습니다.
.cppclass UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
UTexture* _Tex = nullptr;
_Tex = GetTexture(); // ロード済テクスチャを設定する
_MID->SetTextureParameterValue(TEXT("TexParam"), _Tex);
요약
머티리얼의 제어는 여러 가지로 복잡합니다.
Reference
이 문제에 관하여(UE4 Dynamic Material Instance에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/4173d42f8624e70d6475
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
머티리얼을 열고 편집기의 파라미터 -> ScalarParameter 또는 VectorParameter를 선택하여 적용할 파라미터로 설정합니다. 다른 계산(텍스처 컬러와의 가산 등)은 별도로 실시합니다.
BP로 액세스
동적 머티리얼 인스턴스 생성
메쉬에서 동적 머티리얼 인스턴스를 만들고 변수MID
에 보관합니다. 생성자나 BeginPlay 로 합니다.
매개변수 넣기
보유한 변수MID
에 대해 매개변수를 설정합니다. 스칼라 파라미터와 벡터 파라미터를 넣고 있습니다.
텍스처 파라미터를 넣는 경우는 다음과 같습니다. Value
에 텍스처 자산을 지정합니다.
C++로 액세스
동적 머티리얼 인스턴스 만들기
대상 메쉬에 설정된 머티리얼 슬롯에서 동적 머티리얼 인스턴스를 생성합니다.
아래 코드 예.
MyAnimInstance.cpp#include "Materials/MaterialInstanceDynamic.h"
void UMyAnimInstance::NativeBeginPlay()
{
class UMaterialInstanceDynamic* _MID = nullptr;
// スロット名からインデックスに
int32 _SlotIndex = GetSkeletalMeshComponent()->GetMaterialIndex(TEXT("SlotName"));
// ダイナミックマテリアルインスタンスを作成
_MID = GetSkeletalMeshComponent()->CreateDynamicMaterialInstance(_SlotIndex);
// 作成したダイナミックマテリアルインスタンスを保持
MID = _MID;
}
매개변수 넣기
작성한 동적 머티리얼 인스턴스에 매개변수를 설정합니다.
아래 코드 예
MyAnimInstance.cpp
class UMaterialInstanceDynamic* _MID; // 設定対象のマテリアルインスタンス
if(_MID){
// MIDのスカラーパラメータを設定する
_MID->SetScalarParameterValue(TEXT("Speed"), 2.0f);
// MIDのベクターパラメータを設定する
_MID->SetVectorParameterValue(TEXT("Color"), FLinearColor(1.0f, 0.0f, 0.0f));
}
파라미터 지우기
외부 설정을 한 파라미터를 클리어합니다. 매개 변수별로 지울 것 같은 것은없는 것 같습니다.
.cppclass UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
if(_MID){
// 設定したパラメータを全部クリアする
_MID->ClearParameterValues();
}
머티리얼 파라미터 얻기
스칼라 파라미터, 벡터 파라미터, 텍스처 파라미터 등 머티리얼이 가지고 있는 파라미터에 대해서 이하 C++ 코드 예.
머티리얼의 스칼라 파라미터 이름 얻기
.cpp
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
TArray<FMaterialParameterInfo> _ParamInfo;
TArray<FGuid> _ParamIds;
_Mt.MaterialInterface->GetAllScalarParameterInfo(_ParamInfo, _ParamIds);
// スカラーパラメータを全部表示
for (int _Lp=0;_Lp<_ParamInfo.Num();_Lp++){
UE_LOG(LogTemp, Log, TEXT("%s"), *_ParamInfo[_Lp].Name.ToString());
}
}
머티리얼의 특정 스칼라 파라미터 값 얻기
.cpp// スケルタルメッシュのマテリアルパラメータ "TestParam" を取得する
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
float _Buff = 0.0f;
bool _Ret = _Mt.MaterialInterface->GetScalarParameterValue(FName("TestParam"), _Buff);
if(_Ret){
// マテリアル名とパラメータ値を表示
UE_LOG(LogTemp, Log, TEXT("%s, %f"), *_Mt.MaterialSlotName.ToString(), _Buff);
}
}
텍스처 파라미터 설정
설정하는 텍스처는 별도로 로드하지 않습니다.
.cppclass UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
UTexture* _Tex = nullptr;
_Tex = GetTexture(); // ロード済テクスチャを設定する
_MID->SetTextureParameterValue(TEXT("TexParam"), _Tex);
요약
머티리얼의 제어는 여러 가지로 복잡합니다.
Reference
이 문제에 관하여(UE4 Dynamic Material Instance에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/4173d42f8624e70d6475
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
동적 머티리얼 인스턴스 만들기
대상 메쉬에 설정된 머티리얼 슬롯에서 동적 머티리얼 인스턴스를 생성합니다.
아래 코드 예.
MyAnimInstance.cpp
#include "Materials/MaterialInstanceDynamic.h"
void UMyAnimInstance::NativeBeginPlay()
{
class UMaterialInstanceDynamic* _MID = nullptr;
// スロット名からインデックスに
int32 _SlotIndex = GetSkeletalMeshComponent()->GetMaterialIndex(TEXT("SlotName"));
// ダイナミックマテリアルインスタンスを作成
_MID = GetSkeletalMeshComponent()->CreateDynamicMaterialInstance(_SlotIndex);
// 作成したダイナミックマテリアルインスタンスを保持
MID = _MID;
}
매개변수 넣기
작성한 동적 머티리얼 인스턴스에 매개변수를 설정합니다.
아래 코드 예
MyAnimInstance.cpp
class UMaterialInstanceDynamic* _MID; // 設定対象のマテリアルインスタンス
if(_MID){
// MIDのスカラーパラメータを設定する
_MID->SetScalarParameterValue(TEXT("Speed"), 2.0f);
// MIDのベクターパラメータを設定する
_MID->SetVectorParameterValue(TEXT("Color"), FLinearColor(1.0f, 0.0f, 0.0f));
}
파라미터 지우기
외부 설정을 한 파라미터를 클리어합니다. 매개 변수별로 지울 것 같은 것은없는 것 같습니다.
.cpp
class UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
if(_MID){
// 設定したパラメータを全部クリアする
_MID->ClearParameterValues();
}
머티리얼 파라미터 얻기
스칼라 파라미터, 벡터 파라미터, 텍스처 파라미터 등 머티리얼이 가지고 있는 파라미터에 대해서 이하 C++ 코드 예.
머티리얼의 스칼라 파라미터 이름 얻기
.cpp
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
TArray<FMaterialParameterInfo> _ParamInfo;
TArray<FGuid> _ParamIds;
_Mt.MaterialInterface->GetAllScalarParameterInfo(_ParamInfo, _ParamIds);
// スカラーパラメータを全部表示
for (int _Lp=0;_Lp<_ParamInfo.Num();_Lp++){
UE_LOG(LogTemp, Log, TEXT("%s"), *_ParamInfo[_Lp].Name.ToString());
}
}
머티리얼의 특정 스칼라 파라미터 값 얻기
.cpp// スケルタルメッシュのマテリアルパラメータ "TestParam" を取得する
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
float _Buff = 0.0f;
bool _Ret = _Mt.MaterialInterface->GetScalarParameterValue(FName("TestParam"), _Buff);
if(_Ret){
// マテリアル名とパラメータ値を表示
UE_LOG(LogTemp, Log, TEXT("%s, %f"), *_Mt.MaterialSlotName.ToString(), _Buff);
}
}
텍스처 파라미터 설정
설정하는 텍스처는 별도로 로드하지 않습니다.
.cppclass UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
UTexture* _Tex = nullptr;
_Tex = GetTexture(); // ロード済テクスチャを設定する
_MID->SetTextureParameterValue(TEXT("TexParam"), _Tex);
요약
머티리얼의 제어는 여러 가지로 복잡합니다.
Reference
이 문제에 관하여(UE4 Dynamic Material Instance에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/4173d42f8624e70d6475
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
TArray<FMaterialParameterInfo> _ParamInfo;
TArray<FGuid> _ParamIds;
_Mt.MaterialInterface->GetAllScalarParameterInfo(_ParamInfo, _ParamIds);
// スカラーパラメータを全部表示
for (int _Lp=0;_Lp<_ParamInfo.Num();_Lp++){
UE_LOG(LogTemp, Log, TEXT("%s"), *_ParamInfo[_Lp].Name.ToString());
}
}
// スケルタルメッシュのマテリアルパラメータ "TestParam" を取得する
for (const FSkeletalMaterial& _Mt : _SkeletalMesh->Materials) {
float _Buff = 0.0f;
bool _Ret = _Mt.MaterialInterface->GetScalarParameterValue(FName("TestParam"), _Buff);
if(_Ret){
// マテリアル名とパラメータ値を表示
UE_LOG(LogTemp, Log, TEXT("%s, %f"), *_Mt.MaterialSlotName.ToString(), _Buff);
}
}
class UMaterialInstanceDynamic* _MID; // 対象のマテリアルインスタンス
UTexture* _Tex = nullptr;
_Tex = GetTexture(); // ロード済テクスチャを設定する
_MID->SetTextureParameterValue(TEXT("TexParam"), _Tex);
머티리얼의 제어는 여러 가지로 복잡합니다.
Reference
이 문제에 관하여(UE4 Dynamic Material Instance에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/unknown_ds/items/4173d42f8624e70d6475텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)