当前位置: 首页 > news >正文

Unreal Engine Class System

Unreal

  • 🎮 Unreal Engine Class System
    • 🏛 核心概念
    • 🧩 基础类层级
    • 🛠️ 核心宏与用途
    • 🔗 运行时对象管理
    • ⚡ 常见继承关系图(简化)
    • 📦 推荐学习路径
    • 📚 参考

🎮 Unreal Engine Class System


🏛 核心概念

  • Class System:Unreal 基于 C++ 类层级体系 + 反射系统(UClass、UObject、UProperty),使得游戏对象、组件、蓝图都能统一管理。
  • 宏(UCLASS/USTRUCT/UENUM/UPROPERTY/UFUNCTION):告诉 Unreal Header Tool (UHT) 如何生成反射数据。
  • 反射 (Reflection):让 C++ 类在运行时能被引擎识别、序列化、暴露给蓝图/编辑器。

🧩 基础类层级

作用常见用途
UObject所有 UE 类的基类,支持反射、GC、序列化配置类、数据对象
AActor可放入关卡的对象,带有 Transform玩家、敌人、道具
APawn可被控制的 Actor玩家角色、AI 角色
ACharacter内置移动、骨骼、动画的 Pawn人形角色
UActorComponent附加到 Actor 的功能模块血量组件、射击组件
USceneComponent带有 Transform 的组件摄像机、碰撞体、Mesh
UGameInstance游戏生命周期管理,全局对象全局数据、网络会话
UGameMode定义规则与流程,只在服务器存在单局规则
UGameState储存全局游戏状态分数、时间
APlayerController玩家输入与控制逻辑本地/远程玩家控制
APlayerState储存玩家信息(网络同步)分数、昵称
AHUDUI 显示血条、准星
UUserWidgetUMG UI 元素菜单、HUD

🛠️ 核心宏与用途

  • UCLASS()

    声明一个继承自 UObject 的类,可以被反射系统识别。

  • USTRUCT()

    声明一个可序列化的结构体。

  • UENUM()

    声明一个可暴露给编辑器/蓝图的枚举。

  • UPROPERTY()

    修饰类成员变量,使其可被编辑器、蓝图访问、序列化。

  • UFUNCTION()

    修饰成员函数,使其能被蓝图调用或绑定事件。


🔗 运行时对象管理

  • 反射系统 (UClass/UObject)
    • UClass:存放类的元信息。
    • UObject:实例化后的对象基类。
  • GC (Garbage Collection)
    • Unreal 使用引用计数 + 标记清理机制。
    • 必须用 UPROPERTY() 标记指针,才能被 GC 正确追踪。

⚡ 常见继承关系图(简化)

UObject└── AActor├── APawn│     └── ACharacter├── APlayerController├── AGameModeBase├── AGameStateBase├── AHUD└── ...
UObject└── UActorComponent└── USceneComponent├── UCameraComponent├── UStaticMeshComponent├── UPrimitiveComponent└── ...

📦 推荐学习路径

  1. 熟悉 UObject 生命周期与 GC。
  2. 学习 AActor 与组件化设计。
  3. 理解 Pawn / Character输入系统
  4. 熟悉 GameMode / GameState / PlayerController / PlayerState 的职责分工。
  5. 进阶:研究 Gameplay Framework + UMG + AIController + Subsystem

📚 参考

  • Unreal 官方文档: Unreal Gameplay Framework
  • 源码浏览:Engine/Source/Runtime/Engine/
  • 推荐书籍:《Learning C++ by Creating Games with Unreal Engine》

http://www.dtcms.com/a/344629.html

相关文章:

  • 滑动窗口+子串+普通数组算法
  • Spring AI调用本地大模型实战
  • 【LINUX】CentOS7在VMware15中,从命令行界面切换到图形界面的异常汇总
  • Day10 Go语言深入学习(2)
  • 零成本 Redis 实战:用Amazon免费套餐练手 + 缓存优化
  • skywalking-agent与logback-spring.xml中的traceId自动关联的原理
  • 使用C#的 PdfDocument 实现 PDF 页眉页脚的编辑
  • 我用Photoshop Firefly+Blender,拯救被环境毁掉的人像大片
  • Blender模型动画导入到UE5
  • uniappx新增的几个api
  • AI + 教育:个性化学习如何落地?教师角色转变与技术伦理的双重考验
  • 文字提取技术让文档实现数字化效率翻倍-文字识别接口
  • Kubernetes概念:ETCD 的本质与备份恢复实践
  • 永磁同步电机控制算法-反馈线性化滑模直接转矩控制
  • 智慧工厂烟雾检测:全场景覆盖与精准防控
  • 全运会倒计时80天,国鑫服务器如何扛起粤港澳的“数字火炬”?
  • Roadmap:一年实现安全漏洞防治自动化
  • MCP 与 Function Calling 打开真实世界的两种“母体”方式
  • 软件产品确认测试:系统长期运行稳定性(72 小时)测试
  • 集成算法学习笔记
  • Unreal Engine UStaticMeshComponent
  • 线性回归:机器学习中的基础建模工具
  • LeetCode100-76最小覆盖子串
  • C++ 面向对象之继承
  • 【DataGrip】连接达梦数据库后,能查询数据但是看不到表的几种情况分析,达梦数据库驱动包下载DmJdbcDriver18.jar
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • LeetCode100-53最大子数组和
  • 数据工程师——ETL
  • 开发避坑指南(35):mybaits if标签test条件判断等号=解析异常解决方案
  • 【Protues仿真】基于AT89C52单片机的LCD液晶显示屏显示控制