以下是对 Unreal Engine 5(UE5)中一些常见 C++ 代码基础内容的介绍:
一、材质相关操作
概念:
可以在运行时动态地修改材质参数,从而实现各种视觉效果的变化。例如,可以改变颜色、透明度、纹理等参数,以响应游戏中的事件或状态变化。
C++ 代码示例:
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "Materials/MaterialInstanceDynamic.h"
UCLASS()
class AMyMaterialActor : public AActor
{
GENERATED_BODY()
public:
AMyMaterialActor();
protected:
virtual void BeginPlay() override;
private:
UStaticMeshComponent* MyMeshComponent;
};
AMyMaterialActor::AMyMaterialActor()
{
MyMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyMeshComponent"));
RootComponent = MyMeshComponent;
}
void AMyMaterialActor::BeginPlay()
{
Super::BeginPlay();
UStaticMesh* MeshAsset = LoadObject<UStaticMesh>(nullptr, TEXT("/Game/YourMeshAsset.YourMeshAsset"));
if (MeshAsset)
{
MyMeshComponent->SetStaticMesh(MeshAsset);
// 创建动态材质实例
UMaterialInstanceDynamic* DynamicMaterial = MyMeshComponent->CreateAndSetMaterialInstanceDynamic(0);
if (DynamicMaterial)
{
// 设置材质参数
DynamicMaterial->SetScalarParameterValue(TEXT("ParamName"), 1.0f);
DynamicMaterial->SetVectorParameterValue(TEXT("ColorParamName"), FLinearColor(1.0f, 0.0f, 0.0f));
// 可以根据游戏中的逻辑动态更新材质参数
// 例如,在定时器或输入事件处理中更新材质参数
}
}
}
二、输入处理
概念:
允许玩家通过输入设备(如键盘、鼠标、游戏手柄等)与游戏进行交互。可以在 C++ 代码中处理各种输入事件,如移动、攻击、跳跃等操作。
C++ 代码示例:
#include "GameFramework/Pawn.h"
#include "GameFramework/PlayerController.h"
UCLASS()
class AMyPawn : public APawn
{
GENERATED_BODY()
public:
AMyPawn();
protected:
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private:
void MoveForward(float Value);
void MoveRight(float Value);
void Jump();
};
AMyPawn::AMyPawn()
{
// 设置默认控制类
AutoPossessPlayer = EAutoReceiveInput::Player0;
}
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveForward", this, &AMyPawn::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &AMyPawn::MoveRight);
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyPawn::Jump);
}
void AMyPawn::MoveForward(float Value)
{
AddMovementInput(GetActorForwardVector(), Value);
}
void AMyPawn::MoveRight(float Value)
{
AddMovementInput(GetActorRightVector(), Value);
}
void AMyPawn::Jump()
{
if (IsValid(GetController()) && GetController()->IsLocalPlayerController())
{
ACharacter* Character = Cast<ACharacter>(this);
if (Character)
{
Character->Jump();
}
}
}
三、定时器
概念:
可以设置定时器来定期执行特定的函数。这对于实现周期性的任务非常有用,例如更新游戏状态、检查条件、触发事件等。
C++ 代码示例:
#include "GameFramework/Actor.h"
UCLASS()
class AMyTimerActor : public AActor
{
GENERATED_BODY()
public:
AMyTimerActor();
protected:
virtual void BeginPlay() override;
private:
void TimerFunction();
FTimerHandle TimerHandle;
};
AMyTimerActor::AMyTimerActor()
{
}
void AMyTimerActor::BeginPlay()
{
Super::BeginPlay();
// 设置每 1 秒执行一次 TimerFunction
GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyTimerActor::TimerFunction, 1.0f, true);
}
void AMyTimerActor::TimerFunction()
{
// 在这里执行定期要做的事情
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Timer Triggered!"));
// 可以根据需要更新游戏状态、检查条件或触发其他事件
}
通过这些 C++ 代码基础内容,可以在 UE5 中实现更复杂的游戏逻辑和交互。在实际开发中,可以根据项目需求进一步扩展和优化这些代码。同时,还可以结合蓝图系统和其他引擎功能,以实现更高效的开发和更丰富的游戏体验。