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;//算时间用的
};
#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!"));
}
//获得第一个材料的静态网格实例并将其转化为材料
}
到此基本上就大公告成了
运行编辑器
然后就可以见到球每个3秒变次颜色了