UObject相关的宏
UCLASS(...) UE类宏
- UCLASS宏用于标记UObject的派生类,只能修饰UObject的子类。
- Abstract 抽象类
- Blueprintable 可被蓝图继承(AActor已声明) / NotBlueprintable
- BlueprintType 可用于蓝图的变量类型
- Placeable 可通过编辑器放置到关卡/蓝图,可继承 NotPlaceable
- Deprecated 已弃用
UPROPERTY(...) UE类的属性宏
- 通过Unreal Header Tool来解析
- 只有通过 UCLASS 宏声明的类才能使用 UPROPERTY 宏
- 只有UCLASS 宏声明的类才能使用 UPROPERTY 宏
- EditAnywhere:可以在编辑器中任意位置进行编辑。
- VisibleAnywhere:可以在编辑器中显示,但只能读取,不能编辑。
- BlueprintReadWrite:可以在蓝图中进行读写操作。
- BlueprintReadOnly:可以在蓝图中进行读取操作,但不能写入。
- Transient:序列化时会被忽略,不会保存到磁盘。
- SaveGame:在保存游戏状态时进行序列化。
- Category:用于指定该属性在编辑器中的分类,以便组织和显示属性。
- DisplayName:在编辑器中的显示名称。
UFUNCTION(...) UE类的函数宏
- 只有通过 UCLASS 宏声明的类才能使用
- 函数将具有在蓝图中调用和使用的能力
- 通过蓝图编辑器创建函数的实现等功能.
- BlueprintCallable:表示该函数可以在蓝图中进行调用。
- BlueprintPure:表示该函数在蓝图中可以被调用,且不会修改任何状态。
- BlueprintImplementableEvent:表示该函数在蓝图中可以被实现为事件,并且可以在蓝图中进行调用。
- BlueprintAuthorityOnly:表示该函数只能在具有权限的实例中调用。
- BlueprintNativeEvent:原生事件函数,在蓝图中被实现,通过蓝图中的事件调度器来触发。
- Exec:表示该函数可以在控制台中执行。
- Server:表示该函数只能在服务器端执行。
- Client:表示该函数只能在客户端执行。
- NetMulticast:表示该函数可以在多播网络中执行。
- ServiceRequest,ServiceResponse: RPC service request 和 response
USTRUCT() UE结构体宏
- 创建自定义的数据类型
- NoExport: 不创建自动生成代码,只解析元数据
- Atomic: 始终被序列化为单个单元
- BlueprintType: 可用于蓝图中的变量的类型
- BlueprintInternalUseOnly: 不应该暴露给最终用户
- BlueprintInternalUseOnlyHierarchical
UMETA() 元数据说明符
- 声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符
- 控制其与引擎和编辑器各方面的相处方式
- 每一种类型的数据结构或成员都有自己的元数据说明符列表
- 元数据仅存在于编辑器版本中;不要围绕元数据构建游戏逻辑。
- ToolTip:提供关于属性或枚举值的提示信息。
- DisplayName:指定在编辑器和蓝图中显示的名称
- 等等
UPARAM() 函数参数说明符
- 主要用于C++代码暴露给蓝图的相关功能
- UPARAM(ref): 在蓝图中将函数参数按引用传递
-
UPARAM(DisplayName = "XXXX") 在蓝图中显示时的名称
image.png
image.png
UENUM( ) 枚举说明符
- 主要使用以下2个关键字:
- Blueprintable 可被蓝图继承
- BlueprintType 可用于蓝图的枚举类型
UDELEGATE( ) 委托定义类型
- 感觉已废弃
- 整个UE引擎只有6处使用此标记声明委托
RIGVM_METHOD( ) 虚拟机指令宏
- 主要用于高级的引擎开发
- RIGVM_API为导出虚拟机指令函数的API宏
- 游戏开发时使用的较少
UINTERFACE( ) 接口宏
- MinimalAPI: 接口应该可以在其模块外部访问,但不需要导出所有方法。
- 只导出dynamic_cast<>等所需的自动生成方法
- Blueprintable 可以直接由蓝图实现,如果接口有任何蓝图事件,则隐含此操作。
- NotBlueprintable 不能通过蓝图实现
- ConversionRoot 该接口的IsConversionRoot元数据标志。
- 参考: UINTERFACE(meta=(CannotImplementInterfaceInBlueprint), MinimalAPI, BlueprintType)
thunk function
- 对函数添加了一些额外的操作,类似装饰器。
- 将表达式参数放到一个临时函数之中,再将这个临时函数传入函数体。
- 这个临时函数就叫做 Thunk 函数。
断言 check
- check: 最接近基础 assert, 若 Expression 为false,停止执行.
- USE_CHECKS_IN_SHIPPING 开关(默认关闭 发布版本不开启)
- Check在发布版本(默认)中根本不执行任何代码
- check checkCode checkNoEntry checkf 等
- 以"Slow"结尾的宏除外,其仅在调试(Debug)版本中运行
断言 verify
- 行为大致与Check族相同:若 Expression 为false,停止执行.
- BUT: 在发布版本中Verify将忽略返回值,但仍将执行Expression
断言 ensure
- 在出现非致命错误时使用。
- false时: 引擎将通知崩溃报告器,但仍会继续运行。
- Ensure宏在每次引擎或编辑器会话中仅报告一次。
- ensure ensureMsgf ensureAlways ensureAlwaysMsgf
GEngine
- 全局引擎对象的实例
- 功能:包括游戏循环控制、渲染管线管理、输入处理、音频系统等。
- 获取世界指针:UWorld* MyWorld = GEngine->GetWorld();
- 获取鼠标位置:FVector2D MousePosition = GEngine->GetMousePosition();
- 设置全屏:GEngine->GameViewport->ConsoleCommand(TEXT("r.FullScreenMode 1"));
- 获取主摄像机:APlayerCameraManager* MainCamera = GEngine->GetMainCameraManager();
- 获取游戏实例:UGameInstance* GameInst = GEngine -> GameInstance;
- 控制台命令:GEngine->Exec(World,TEXT("SomeConsoleCommand"));
- 启用屏幕调试信息: GEngine-> bEnableOnScreenDebugMessages = true;
GWorld
- GEngine->GetWorld()获取到当前正在运行的游戏世界的引用。
- 需要进行有效性检查,确保返回值
- 管理场景和物体:它包含了场景的层级结构和物体的实例,提供对场景和物体的创建、更新、销毁等管理功能。
- 处理游戏逻辑:编写和执行游戏逻辑,包括处理用户输入、控制角色行为、执行游戏规则等。
- 处理碰撞和物理:处理物体之间的碰撞和相互作用。用物理引擎来模拟物体的运动、重力、摩擦等物理效果。
- 管理关卡和关卡切换:加载和管理游戏中的不同关卡。它提供了切换关卡、加载和卸载关卡等功能。
- 事件处理和通信:处理和分发游戏中的事件,包括玩家输入、游戏状态改变等。实现对象之间的通信和交互。
- 保存和加载游戏状态:包括场景中的物体、玩家状态、游戏进度等。通过序列化和反序列化机制,实现游戏的保存和恢复功能。
GLog
- 用于输出日志信息的全局日志系统
- UE_LOG宏:用于输出自定义的日志消息
- UE_CLOG宏:类似于UE_LOG,但只在编译时启用。
- VLOG宏:用于输出详细的调试信息。
- 可自定义日志的类别 以及警告级别.
全局变量系列
- GFrameCounter: 游戏运行时的帧数
- GIsPlayInEditorWorld: 是否在编辑器中运行游戏
- GIsClient / GIsServer : 是在客户端还是服务器
- GIsEditor / GIsRunning
// 自动化测试中,都通过
check(GEngine);
auto c = GFrameCounter;
check(GIsRunning);
check(GIsClient);
check(GIsServer);
check(GIsEditor);
check(!GIsPlayInEditorWorld);
网友评论