【UE5随笔】01_基础类型与容器

1. 游戏模式类

MyGameMode.h

#pragma once

#include "CoreMinimal.h"

// 头文件必须放在这个位置,不能更改
#include "MyHUD.h"
#include "MyGameState.h"
#include "MyPawn.h"
#include "MyPlayerController.h"
#include "MyPlayerState.h"

#include "GameFramework/GameMode.h"
#include "MyGameMode.generated.h"

UCLASS()
class MYPROJECT_API AMyGameMode : public AGameMode
{
   
   
	GENERATED_BODY()
	AMyGameMode();
public:
	
	virtual void BeginPlay() override;
	virtual void Tick(float deltaTime) override;
	virtual void EndPlay(const EEndPlayReason::Type endPlayRes) override;
};

MyGameMode.cpp

#include "MyGameMode.h"

AMyGameMode::AMyGameMode() 
{
   
   
    DefaultPawnClass = AMyPawn::StaticClass();
    PlayerControllerClass = AMyPlayerController::StaticClass();
    GameStateClass = AMyGameState::StaticClass();
    PlayerStateClass = AMyPlayerState::StaticClass();
    HUDClass = AMyHUD::StaticClass();
}

void AMyGameMode::BeginPlay()
{
   
   
    Super::BeginPlay();
}

void AMyGameMode::Tick(float deltaTime)
{
   
   
    Super::Tick(deltaTime);
}

void AMyGameMode::EndPlay(const EEndPlayReason::Type endPlayRes)
{
   
   
    Super::EndPlay(endPlayRes);
}

2. 数据类型

2.1 基本类型

类 型 含 义
bool 基本的布尔类型,代表真(true)或假(false)的值。用于简单的条件和逻辑
### UE5中委托的使用方法及解决方案 在UE5中,委托(Delegate)是一种强大的工具,用于实现事件驱动的编程模型。以下是关于UE5中委托的基本使用方法和常见问题的解决方案。 #### 1. 委托的基础概念 委托是UE5中用于实现函数回调机制的一种方式。它允许一个对象在特定事件发生时通知其他对象。根据是否支持蓝图交互,委托分为静态委托和动态委托[^4]。 - **静态委托**:不支持蓝图交互,性能高效,适用于纯C++逻辑或高频调用场景。 - **动态委托**:支持蓝图交互,稍低性能,但适合蓝图交互、动态绑定或跨模块通信。 #### 2. 声明和定义委托 在UE5中,可以通过宏来声明和定义委托。以下是一些常见的委托类型及其声明方式[^3]: - **无参数的多播委托** ```cpp DECLARE_MULTICAST_DELEGATE(FMuitiDelagateWithNoParam); FMuitiDelagateWithNoParam MuitiDelagateWithNoParam; ``` - **带一个参数的多播委托** ```cpp DECLARE_MULTICAST_DELEGATE_OneParam(FMuitiDelagateWithOneParam, FString); FMuitiDelagateWithOneParam MuitiDelagateWithOneParam; ``` #### 3. 绑定函数到委托 要将函数绑定到委托,可以使用`Bind`或`AddUFunction`等方法[^2]。 - **绑定普通函数** ```cpp MyDelegate.BindStatic(MyStaticFunction); ``` - **绑定成员函数** ```cpp MyDelegate.BindUObject(this, &MyClass::MyMemberFunction); ``` - **绑定蓝图可调用函数** ```cpp TransformProxy->OnEndTransformEdit.AddUFunction(this, FName("OnEndWidgetCompTransformEdit")); ``` #### 4. 触发委托 触发委托通常通过调用`Broadcast`或`Execute`方法来完成[^3]。 - **广播多播委托** ```cpp MuitiDelagateWithNoParam.Broadcast(); ``` - **执行单播委托** ```cpp if (MyDelegate.IsBound()) { MyDelegate.Execute(); } ``` #### 5. 动态内存分配 在某些情况下,可能需要动态分配委托实例。这可以通过重载的`new`操作符实现[^1]。 ```cpp inline void* operator new(size_t Size, FDelegateBase& Base) { return Base.Allocate((int32)Size); } ``` #### 6. 常见问题及解决方案 - **问题:委托未绑定导致崩溃** 确保在调用`Execute`之前检查委托是否已绑定: ```cpp if (MyDelegate.IsBound()) { MyDelegate.Execute(); } ``` - **问题:动态委托无法蓝图交互** 确保函数已用`UFUNCTION`标记,并且委托名以`F`开头[^4]。 - **问题:性能优化** 如果委托仅用于纯C++逻辑,建议使用静态委托以减少运行时开销。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值