动态材质的创建:使用C++与材质编辑器进行通信

翻译 2016年08月29日 17:35:30

1.先新建一个C++项目



2.新建一个材质:


弹出内容面板后,右键点击内容面板



弹出材质编辑器后,接下来开始编辑材质。



3 然后新建个C++类







4然后开始编辑代码:

先在项目的头文件中加上

DECLARE_LOG_CATEGORY_EXTERN(YourLog, Log, All);
在cpp文件中加上<span style="font-size:14px;"></span><pre name="code" class="html">DEFINE_LOG_CATEGORY(YourLog);以使用UE_LOG打日志。当然不加也行


test02.h

#pragma once

#include "Engine.h"

DECLARE_LOG_CATEGORY_EXTERN(YourLog, Log, All); //声明一个日志类别 使用UE_LOG 打日志的话,就得加上

test02.cpp

#include "test02.h"

IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, test02, "test02" );
DEFINE_LOG_CATEGORY(YourLog);//定义日志类别,要在cpp文件中加上这句 方可使用UE_LOG


在我们建立的TestColor1中加上一个静态网格的属性,属性设为在编辑器中可见

UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* StaticMesh;

TestColor1.h

#pragma once

#include "GameFramework/Actor.h"
#include "TestColor1.generated.h"

UCLASS()
class TEST02_API ATestColor1 : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ATestColor1();

	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;

	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* StaticMesh;//静态网格属性

private:
	float m_alltime;//算时间用的
	
};


TestColor1.cpp

#include "test02.h"
#include "TestColor1.h"


// 设置基本属性的默认值
ATestColor1::ATestColor1():m_alltime(0)
{
 	// 设置这个演员叫蜱虫()每一帧。你可以关掉这个如果你不需要它来提高性能。
	PrimaryActorTick.bCanEverTick = true;
	StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(FName("StaticMesh")); //初始化静态网格的属性
}

// 在游戏开始时调用
void ATestColor1::BeginPlay()
{
	Super::BeginPlay();
	
	
}

// 每帧调用
void ATestColor1::Tick( float DeltaTime )
{
	Super::Tick( DeltaTime );
	//GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("This is an on screen message!"));

	if (m_alltime < 3)
	{
		m_alltime += DeltaTime;
	}
	else
	{
		UMaterialInstanceDynamic* DynamicMatInstance = StaticMesh->CreateAndSetMaterialInstanceDynamic(0);

		//生成随机RGB和α值向量参数
		FLinearColor RandomColor;
		RandomColor.R = FMath::RandRange(0, 1);
		RandomColor.G = FMath::RandRange(0, 1);
		RandomColor.B = FMath::RandRange(0, 1);
		RandomColor.A = FMath::RandRange(0, 1);

		//如果我们有一个有效的动态材料实例,修改它的参数
		if (DynamicMatInstance)
		{
			DynamicMatInstance->SetVectorParameterValue(FName("ColorParm"), RandomColor);
			//DynamicMatInstance->SetScalarParameterValue(FName("MetalParam"), FMath::RandRange(0, 1));
		}
		m_alltime = 0;
		UE_LOG(YourLog, Warning, TEXT("This is a message to yourself during runtime!"));
	}
	//获得第一个材料的静态网格实例并将其转化为材料
	
}


代码编辑完后,把C++类拖进场景中,然后将之前我们建立的材质赋给他的Mesh




到此基本上就大公告成了

运行编辑器



然后就可以见到球每个3秒变次颜色了


UE4 C++ 从内存数据创建动态材质

动态材质的创建
  • TC00TC
  • TC00TC
  • 2017年06月26日 18:40
  • 796

UE4材质编辑器 - 如何使用折射

材质编辑器 - 如何使用折射 Intermediate Unreal Engine 4.9 材质 - 操作指南 本页面的内容: 折射 折射率或 IOR 在材质中使用折射 折射提示与技巧 折射...
  • zolin7
  • zolin7
  • 2017年07月05日 13:07
  • 496

Houdini如何使用VEX创建材质?

使用Houdini版本V13 做一个简单场景 在Shop面板下创建“Surface Shader Builder”节点, 双击进入,删除Global节点,这个案例...

Bitmap2Material 材质编辑器

  • 2015年11月16日 11:12
  • 90.31MB
  • 下载

UDK材质编辑器用户指南

  • 2011年10月25日 11:41
  • 388KB
  • 下载

(199)材质编辑器 - 如何创建和使用材质实例。

在 UE4 中,必须创建、设置和调整标准材质,这是非常耗时的过程。 为了帮助加快并简化此过程,虚幻引擎 4 提供了一种特殊材质类型,即 材质实例。 在以下操作指南中,您将学习如何在项目中设置和使用材质...

3ds max 7材质编辑器

  • 2008年10月25日 19:21
  • 2.03MB
  • 下载

3d max 材质编辑器操作实例——自定义球

3dmax材质编辑器操作实例—自定义示例球   本节学习3dmax材质编辑器操作实例—自定义示例球。材质编辑器的操作比较繁琐,需要花费一些时间才能熟练掌握。这里先通过一个比...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态材质的创建:使用C++与材质编辑器进行通信
举报原因:
原因补充:

(最多只允许输入30个字)