-
-
[分享]Unreal Engine 学习(ShooterGame)
-
发表于: 6天前 621
-
前言
Unreal Engine(简称 UE)是由 Epic Games 开发的一款大型 实时3D游戏引擎。它主要用于开发 游戏、电影、虚拟现实(VR)、建筑可视化、仿真系统 等。
代表性游戏有:
- PUBG: Battlegrounds(绝地求生)
- Delta Force: Hawk Ops(三角洲行动)
使用的引擎版本都是UE4
但UE4框架十分庞大(代码大概1500万行),如选择浏览完整个项目不现实,所以笔者选择通过 ShooterGame (一款官方经典示例demo)来入门学习UE4


1. 确定结构核心
UE4 通常结构如下:
1 2 3 4 5 6 7 8 | UnrealEngine/ ├─ Engine ├─ Samples ├─ Templates ├─ FeaturePacks ├─ Setup.bat ├─ GenerateProjectFiles.bat └─ UE4.sln |
其中 UE4 所有引擎代码都在 Engine 目录下,真正的源码主要在 Engine/Source
而在 Source 中,Runtime 又是最核心的部分
1 2 3 4 5 6 7 8 9 10 11 | Runtime/ ├─ Core ├─ CoreUObject ├─ Engine ├─ RenderCore ├─ RHI ├─ InputCore ├─ Slate ├─ SlateCore ├─ Networking └─ PhysicsCore |
本文将会重点围绕此处展开
逻辑核心类
在 UE4 中几乎所有游戏逻辑都围绕几个核心类:
1 2 3 4 5 6 7 8 9 | UGameInstance ↓UWorld ↓AActor ↓APawn ↓ACharacter |
例如: 要获取人物坐标:看看ShooterGame是怎么做的:

这里为要获取AI的位置,由AShooterBot调用了GetActorLocation(),而GetActorLocation()的结果结构为在FVector中:一进来就可以看到x、y、z坐标,结构十分清晰

继续跟着AShooterBot,发现其继承了AShooterCharacter,继续跟踪

继续继承ACharacter,继续跟踪

ACharacter继承了APawn

APawn又继承了AActor和INavAgentInterface

AActor继承了UObject

UObject继承了UObjectBaseUtility

UObjectBaseUtility继承了UObjectBase

而UObjectBase为UE对象系统最底层的基类之一

另外INavAgentInterface也为导航系统接口(给AI寻路用)

大致层级关系为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | UObjectBase(最底层对象) ↓UObjectBaseUtility ↓UObject ↓AActor ↓APawn ↓ACharacter ↓AShooterCharacter ↓AShooterBot |
解析
1 UObjectBase(最底层对象)
UObjectBase 是 UE 对象系统的最底层类。它只做最基础的事情:
- 对象ID
- 对象类型
- 对象标志
- 对象注册
2 UObjectBaseUtility
作用为:提供对象操作工具函数
例如:判断对象是不是某个类
3 UObject(UE对象系统核心)
这是UE反射系统的核心类
提供:反射系统、GC垃圾回收、自动管理对象、序列化、存档加载、对象查找、对象创建等底层核心功能
4 AActor(世界中的对象)
Actor 是世界中的实体。
例如:、类型、角色、物体、子弹、灯光、位置坐标等等

5 APawn(可被控制的Actor)
Pawn = 可被控制的Actor
例如:玩家角色、AI角色、载具、飞机等等

可以看到设置获取玩家状态等方法,还有非常多功能

6 ACharacter(带骨骼的Pawn)
Character专门用于人形角色
提供:碰撞、移动系统、骨骼模型等功能
其中UCharacterMovementComponent提供:走、跑、跳、下蹲、游泳、飞行等操作

在UCharacterMovementComponent中能看到相应的移动控制项(非常多)

7 AShooterCharacter(ShooterGame玩家)
这是ShooterGame自定义拓展的功能 不属于ue4
作用实现:FPS玩家角色
提供功能:、武器系统、射击、换弹、血量、死亡等等


8 AShooterBot
这是ShooterGame自定义拓展的功能 不属于ue4
例如:AI敌人、敌人NPC、机器人等
总结
本篇博客为笔者学习记录,如有错漏请留言,欢迎讨论