版权声明:本文为CSDN博主「永远的小白虾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
1、Actor 的 EndPlay 事件在哪些时候会调用?
EndPlay - 在数个地方调用,保证 Actor 的生命走向终点。在游戏过程中,如包含流关卡的 Actor 被卸载,Destroy 将发射此项和关卡过渡。调用 EndPlay 的全部情形:
- 对 Destroy 显式调用
- Play in Editor 终结
- 关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载
- Actor 的生命期已过
- 应用程序关闭(全部 Actor 被销毁)
2、BlueprintImplementableEvent 和 BlueprintNativeEvent 之间有什么区别?
BlueprintImplementableEvent 和 BluuprintNativeEvent 两者都是函数标记,用于修饰函数的。
BlueprintImplementableEvent:在 C++ 可以声明函数(不能定义,蓝图重写),蓝图定义实现该函数,可以在 C++ 里调用。
BlueprintNativeEvent:在 C++ 可以声明并定义该函数(带 _Implementation 后缀),蓝图重写实现该函数有优先调用权(蓝图可以重写或不重写 C++ 父类函数),如果没有实现则调用 C++ 实现的版本。
使用方法
UFUNCTION(BlueprintImplementableEvent) void TestA();
UFUNCTION(BlueprintNativeEvent) void TestB();
UE4 函数标记 BlueprintImplementableEvent 和 BlueprintNativeEvent 区别
3、BlueprintPure 在什么时候使用?
BlueprintPure 的特点是在 C++ 和蓝图中都可以调用,但是其修饰的函数必须有函数返回值或
函数参数输出,否则会编译失败。被声明的函数不会以任何方式拥有对象,并且可以在蓝图或关卡蓝图图标中执行。
因此,BlueprintPurs 修饰的函数,主要用于
- 数学中的 “+、-、*、/” 操作(数值处理),
- 变量获取节点(获取变量中的部分数据)
4、UE4 的蓝图中对于 Foreach 等循环采用的是类似并行的方式,试实现一个串行的方法。
首先需要了解并行和串行的区别。
- 并行通讯:同一时刻,可以一次性执行多步。
- 串行通讯:同一时刻,只能一步一步的执行。
for(int i=0;i<10;i++); // 所以我自己写个循环,不开多线程应该就可以了吧。毕竟没有找到标准答案,只能自己猜测了。求大佬,教教我。
5、如何解决子弹穿墙问题?
-
如果采用的是射线检测的话,
LineTracebyChannel函数只会返回首个命中对象。但为了防止真出现子弹穿墙问题,我们可以让LineTracebyChannel只要击中一个物体就会停止射线检测。 -
如果采用的是为子弹单独制作成一个物体的话,在射击时,只要将墙体和子弹的碰撞属性设为
Block,便会阻止子弹继续前进。
6、UE4 对 USTRUCT 的内存会自动管理吗?
不会,只有使用 UPROPERTY 宏标记的 USTRUCT 才能被计入垃圾回收。
7、Blueprintable 和 BlueprintType 的意义
Blueprintable: 将使用该宏标志的类可以作为创建蓝图的基类(类似于:那些 base 类)。
其默认为 NotBlueprintable , 即不可以创建蓝图子类。
BlueprintType: 将使用该宏标志的类可以作为蓝图中变量的类型(类似于:int)。
与之对应的有 NotBlueprintType,即不可以在蓝图中创建该类型的变量。
8、UE4 入门宏
UE4 中的宏 Macro,和函数比较相似,都是对一些功能算法进行了封装,都有一个输入点和输出点,调用方法也类似。
宏与函数的区别在于:
- (1)宏是直接展开,即直接将宏的代码直接复制替换到所有使用当前宏的地方,
- 这点类似于 C++ 中的宏,而函数则是需要编译。
- (2)宏运行时无实体,函数运行时有实体。
- (3)宏有多个入口
Exec多个出口Exec,函数只有一个入口Exec一个出口Exec。 - (4)宏可以使用
Delay,函数不可以使用Delay。 - (5)宏不可以复制,函数可以复制。
- (6)宏的参数可以使用
Exec类型,函数不可以
宏的特点:
- (1)类的成员函数可以被子类继承,但宏不会被继承,子类无法使用父类的宏
- (2)可以自定义宏库,供所有蓝图使用
- (3)宏特别适合于制作控制流,如引擎自带的
FilpFlop。 - (4)宏中定义局部变量,只能使用基本数据类型,不能使用类类型。
- 宏:执行快,功能更强,但占据空间多,安全性差
- 函数:执行较慢,占空间少,安全性高
个人总结,优先用函数,少用宏
9、UE4 的游戏框架包含哪些内容?
(1)使用玩家输入或者 AI 逻辑控制 Pawns
Controller 是一个负责指导 Pawn 的 Actor 。它们通常有两种版本,AIController 和
PlayerController。控制器可以 “拥有” 一个 Pawn 来控制它。
PlayerController 是 Pawn 与玩家控制他之间的接口。其代表了玩家的意志。
AIController 是一个可以控制 Pawn 的模拟意志。
(2)代表世界的玩家、朋友、敌人
Pawn 是一个 Actor。Pawn 可以被 Controller 持有,他们可以接收输入,可以做很多游戏逻辑。
Character 是一个人形风格的 Pawn,继承自 Pawn。他默认自带一个胶囊体碰撞器和角色运
动组件。他可以做到基本的人形移动,他可以平滑的复制移动并且有一些动画相关的功能。
(3)向玩家展现信息
HUD 是一个抬头显示器。可以显示健康、弹药等,每个 PlayerController 通常有一个。
Camera 相当于玩家的眼球并且管理他的行为。每个 PlayerController 通常也有其中一个。
(4)设置与追踪游戏的规则
游戏模式(GameMode)游戏的概念分为两类。GameMode 与 GameState 是游戏的定义,
包括像游戏规则的事情、胜利的条件。它只存在于服务器上。它通常没有太多的数据变化,
也没有客户端需要了解的瞬态数据。
游戏状态(GameState)包括像关联玩家名单得分,那里的作品是一盘棋,或者游戏中的
任务完成列表。GameState 存在于所有服务器与客户端上,可自由复制使所有计算机保持
最新状态。
玩家状态(PlayerState)是游戏参与者的状态,PlayerState 包含玩家姓名,得分,
类似 MOBA 的匹配等级。所有玩家的 PlayerState 存在于所有机器上,可以自由复制保持同步。
UE4 - 游戏框架 —— GameMode、GameState、PlayerState、Controller、Pawn
10、切换关卡的命令是什么?
一般地图比较小,且关卡各自独立的时候,使用 openLevel ,通过输入一个 LevelName 来切换关卡。
当在开放世界,即地图特别大的时候,我们会将多个关卡拼接为一个大世界地图, 然后采用 无缝切换地图的方式,来加载当前的地图。
此时有三个用来驱动转移的主要函数:
UEngine::BrowseUWorld::ServerTravelAPlayerController::ClientTravel
11、UE4 的模块系统
首先:UE4 中模块分为 5 部分:
Developer主要是跨平台工具,Merge 和一些底层的工具。Editor主要是编辑器相关的代码Programs主要是独立于引擎,但大多数又依赖引擎的工具,UBT 就在这里ThirdParty第三方库或者插件RunTime是主要的 Gameplay 等等和游戏相关的代码了。
12、简单介绍一下对象系统(UObject 类)和类型系统(UClass 类)。
UObject 类为对象系统的基类。该类的主要作用是存放
- 对象的名字
- 标记信息(ObjectFlags)
- 类型信息(ClassPrivate)
- Outer 对象
- 在对象管理数组中的索引
UClass 类主要用于描述 C++ 中的类信息。在 UE4 在 UClass 实例不仅仅用于描述
C++(Native) 类,也用来描述 Blueprint 生成的类。
13、Core 模块包含了哪些基础类。
- Core 模块下有很多文件夹:
- Containers 包含各种 C++ 容器类:
Array、List、Map、Queue、Set等等 - Delegates 包含各种代理声明的宏:
DECLARE_DELEGATE、DECLARE_MULTICAST_DELEGATE、DECLARE_EVENT等等 - Logging 包含日志功能类和宏:
UE_LOG、ELogVerbosity等等 - Math 包含各种数学函数和结构:
Box、Color、Matrix、Quat、Range、Rotator、Vector、UnrealMath等等
14、RHI 模块
RHI 即 RenderHardwareInterface , 即渲染硬件接口, 是 UE 为实现跨平台而实现的一套 API
每个 RHI 接口都为 OpenGL, Vulkan, DX11 等做了不同的实现. 在引擎初始化时使用的绘图
接口就已经确定, 引擎就可以确定 RHI 所使用接口的版本.
15、Engine 模块
Engine 模块主要用于定义 Actor 和组件,同时实现了游戏的基本框架。
16、UMG 模块
UMG 模块是虚幻运动图形的简称。 主要用到以下几种文件:
- Blueprint( User Inteface-Blueprint) 也就是常说的 UMG ,是我们常用的 UI 工程文件
- Font(字体资源拖入 Content Browser 自动生成)字体文件
- Texture (PNG 资源拖进来可以自动生成) 图片资源文件
- Material 材质文件,可用于 UI 材质或者 mesh 材质
- Actor(Blueprint Class-Actor)可以摆放到场景中的文件类型,用于制作 3DUI
17、UE4 中的类型系统
UE4 的宏可以分为四种:UCLASS、USTRUCT、UFUNCTION、UPROPERTY。
其中:
UCLAS用于修饰类,USTRUCT用于修饰结构体,UFUNCTION用于修饰函数,UPROPERTY用于修饰变量。