动态材质的创建:使用C++与材质编辑器进行通信
2016-08-29 17:35
375 查看
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 propertiesATestColor1();// Called when the game starts or when spawnedvirtual void BeginPlay() override;// Called every framevirtual 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秒变次颜色了
相关文章推荐
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C#的SerialPort使用,动态创建串口连接,短信猫通信
- C++ VS 2008中ATL的创建,使用。并在C++项目中进行调用测试
- 在linux上使用c++实现http/2协议进行通信
- C++使用new创建动态结构
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- c++builder上使用TIDTCPServer和TIDTCPClient进行简单通信,如何通过代码动态设置TIDTCPServer的Bindings属性。
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- c++ 使用new动态的创建指定大小的二维数组
- c++中try_catch的使用,二维数组动态创建
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- 使用C++ vector类创建动态数组
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互
- 在Javascript中使用protobuf与c++进行通信
- c++ primer plus 习题5.7(使用new为结构创建动态数组)