UE的Gameplay框架
面试的时候经常被问到UE的Gameplay框架,但一直组织不出语言去描述,问了Deepseek,这里总结一下。
UObject/UClass
UObject是UE的基础类,大部分我们用到的类都继承自UObject。UClass也继承自UObject,它和UObject一起为UE提供一些重要功能:
反射、序列化、垃圾回收等。
Actor
所有可放置对象的基类(如角色、道具、触发器)都是Actor,相较于UObject,Actor多了网络复制(Replication),有了生命(Spawn),生命周期内可以出发一些事件,有三个最基础的:Beginplay(对象首次在游戏中触发)、Endplay(对象离开游戏时触发)、Tick(每帧触发)。
ActorComponent
ActorComponent依赖Actor存在,UE把Transform放在ActorComponent里面(封装在USceneComponent里面),想要获取位置信息就从Actor的RootComponent(一个Actor想被放进场景中必须有个RootComponent)里拿。ActorComponent的功能当然不止这点,相机、碰撞、物理这些都是ActorComponent给Actor提供的,总的来说就是负责Actor某个功能。
Level和World
一个World至少由1个Level组成,分为PersistentLevel(主关卡)和其他Level。Persistentlevel在一开始就加载进World。Level简单来说就是Actor的容器,切换Level就可以切换不同场景(关卡)。
GameInstance/Gamemode/Gamestate
一个游戏只有一个GameInstance,无论Level怎么切换,GameInstance都是不会变的,可以在里面编写属于整个游戏范围的逻辑。
GameMode定义游戏规则(如胜利条件、玩家生成逻辑),仅在服务器运行。
GameState同步游戏全局状态(如比分、剩余时间),复制到所有客户端。
Pawn/DefaultPawn/SpectatorPawn/Character
Pawn的父类是Actor,之所以分化出Pawn来,是因为需要一个类响应外部输入(实际上Actor就可以接受Input),也就是能被玩家或AI控制。UE为了处理输入专门设置了InputComponent,用来实现按键响应,当然Pawn还实现了更高级的逻辑控制比如:寻路。
DefaultPawn,默认带了一个DefaultPawnMovementComponent、spherical CollisionComponent和StaticMeshComponent。
SpectatorPawn,观战用的,关闭了StaticMesh的显示,碰撞也是观战的通道。
Character,一般是人形角色,在默认三件套基础上升级了,模拟人行走的CharacterMovementComponent、胶囊体CapsuleComponent、SkeletalMesh。
PlayerController/AIController
Controller是UE设置来控制Pawn的,其中最重要的两个就是PlayerController和AIController。在多人游戏里,PlayerController同时存在于客户端和服务器端,玩家加入游戏时,服务器生成一个PlayerController,再把PlayerController复制到客户端,可以说PlayerController才是玩家实际控制的实体,所有涉及到玩家的相关操作(比如:移动)都由它完成。
AIController主要是控制非玩家的Pawn,也就是NPC,仅存在于服务器端。同PlayerController对比,少了Camera、Input、UPlayer关联,HUD显示,Voice、Level切换接口,增加了AI需要的组件:Navigation、Task。
参考:
大钊的InsideUE https://zhuanlan.zhihu.com/p/22833151
UE4中C++编程 II http://www.funwoow.com/ue4-cpp-2/
本文作者:42今天吃什么
本文链接:https://www.cnblogs.com/forty-two/p/18715698
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署