美文网首页
22 UE5 各种宏 断言 全局对象

22 UE5 各种宏 断言 全局对象

作者: 游戏开发程序员 | 来源:发表于2024-04-08 23:26 被阅读0次

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);

相关文章

  • 断言宏

    大部分的测试框架都有许多的断言宏去捕获所有可能的条件形式(_EQUALS, _NOTEQUALS, _GREATE...

  • 自学Swift之断言 assertion

    断言概念: 官方概念太无聊,并且冗余... 断言(assertion) 是一个全局函数 断言理解: 我理解的断言(...

  • 系统调试

    断言 单元测试 单元测试断言 测试方法 宏定义

  • WebRTC断言宏

    WebRTC提供了丰富的断言宏,当断言失败时,可以打印指定的日志信息。除了常用的宏函数RTC_DCHECK,还提供...

  • Postman pm 对象 - 测试相关功能

    pm 对象还提供了测试相关功能: pm.test 函数用来生成一个测试,可以输入测试标题,并加入各种断言。断言全部...

  • js非常规反爬

    浏览器全局对象检测window、navigator、Location等浏览器全局对象各种检测,及是否不更改(这三个...

  • MJExtension

    <1> MJExtensionConst .h -- 宏定义error/log,一堆断言,宏定义重写desc方法(...

  • XCTest各种断言

    NGI.原文地址:http://www.cnblogs.com/ngi8/p/5120871.html XCTes...

  • web前端学习教程:JS的作用域链

    我们都知道js是一个基于对象的语言,系统内置各种对象。 而window作为一个天然存在的全局对象,它承担了所有全局...

  • 全局对象与临时转换

    全局对象 ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象 这些全局...

网友评论

      本文标题:22 UE5 各种宏 断言 全局对象

      本文链接:https://www.haomeiwen.com/subject/nyghzdtx.html