【转载】UE4 面试基础知识(一)

1、Actor 的 EndPlay 事件在哪些时候会调用?

EndPlay - 在数个地方调用,保证 Actor 的生命走向终点。在游戏过程中,如包含流关卡的 Actor 被卸载,Destroy 将发射此项和关卡过渡。调用 EndPlay 的全部情形:

  • 对 Destroy 显式调用
  • Play in Editor 终结
  • 关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载
  • Actor 的生命期已过
  • 应用程序关闭(全部 Actor 被销毁)

Actor 生命周期

2、BlueprintImplementableEventBlueprintNativeEvent 之间有什么区别?

BlueprintImplementableEventBluuprintNativeEvent 两者都是函数标记,用于修饰函数的。

BlueprintImplementableEvent:在 C++ 可以声明函数(不能定义,蓝图重写),蓝图定义实现该函数,可以在 C++ 里调用。

BlueprintNativeEvent:在 C++ 可以声明并定义该函数(带 _Implementation 后缀),蓝图重写实现该函数有优先调用权(蓝图可以重写或不重写 C++ 父类函数),如果没有实现则调用 C++ 实现的版本。

使用方法

UFUNCTION(BlueprintImplementableEvent) void TestA();
UFUNCTION(BlueprintNativeEvent) void TestB();
复制代码

UE4 函数标记 BlueprintImplementableEvent 和 BlueprintNativeEvent 区别

3、BlueprintPure 在什么时候使用?

BlueprintPure 的特点是在 C++ 和蓝图中都可以调用,但是其修饰的函数必须有函数返回值或 函数参数输出,否则会编译失败。被声明的函数不会以任何方式拥有对象,并且可以在蓝图或关卡蓝图图标中执行。 因此,BlueprintPurs 修饰的函数,主要用于

  • 数学中的 “+、-、*、/” 操作(数值处理),
  • 变量获取节点(获取变量中的部分数据)

UE4 入门-常见的宏-UFUNCTION

UE4 的 BlueprintPure 用法

4、UE4 的蓝图中对于 Foreach 等循环采用的是类似并行的方式,试实现一个串行的方法。

首先需要了解并行和串行的区别。

  • 并行通讯:同一时刻,可以一次性执行多步。
  • 串行通讯:同一时刻,只能一步一步的执行。
for(int i=0;i<10;i++); // 所以我自己写个循环,不开多线程应该就可以了吧。毕竟没有找到标准答案,只能自己猜测了。求大佬,教教我。
复制代码

5、如何解决子弹穿墙问题?

  1. 如果采用的是射线检测的话,LineTracebyChannel 函数只会返回首个命中对象。但为了防止真出现子弹穿墙问题,我们可以让 LineTracebyChannel 只要击中一个物体就会停止射线检测。

  2. 如果采用的是为子弹单独制作成一个物体的话,在射击时,只要将墙体和子弹的碰撞属性设为 Block,便会阻止子弹继续前进。

UE4 -(蓝图)第二十一课射线

UE4 碰撞规则详解

6、UE4 对 USTRUCT 的内存会自动管理吗?

不会,只有使用 UPROPERTY 宏标记的 USTRUCT 才能被计入垃圾回收。

UE4 入门-常见的宏 - UPROPERTY

UE4 入门-常见的宏 - USTRUCT

7、BlueprintableBlueprintType 的意义

Blueprintable: 将使用该宏标志的类可以作为创建蓝图的基类(类似于:那些 base 类)。 其默认为 NotBlueprintable , 即不可以创建蓝图子类。

BlueprintType: 将使用该宏标志的类可以作为蓝图中变量的类型(类似于:int)。 与之对应的有 NotBlueprintType,即不可以在蓝图中创建该类型的变量。

UE4 入门-常见的宏 - UCLASS

8、UE4 入门宏

UE4 中的宏 Macro,和函数比较相似,都是对一些功能算法进行了封装,都有一个输入点和输出点,调用方法也类似。

宏与函数的区别在于:

  • (1)宏是直接展开,即直接将宏的代码直接复制替换到所有使用当前宏的地方,
  • 这点类似于 C++ 中的宏,而函数则是需要编译。
  • (2)宏运行时无实体,函数运行时有实体。
  • (3)宏有多个入口 Exec 多个出口 Exec ,函数只有一个入口 Exec 一个出口 Exec
  • (4)宏可以使用 Delay ,函数不可以使用 Delay
  • (5)宏不可以复制,函数可以复制。
  • (6)宏的参数可以使用 Exec 类型,函数不可以

宏的特点:

  • (1)类的成员函数可以被子类继承,但宏不会被继承,子类无法使用父类的宏
  • (2)可以自定义宏库,供所有蓝图使用
  • (3)宏特别适合于制作控制流,如引擎自带的 FilpFlop
  • (4)宏中定义局部变量,只能使用基本数据类型,不能使用类类型。
  1. 宏:执行快,功能更强,但占据空间多,安全性差
  2. 函数:执行较慢,占空间少,安全性高

个人总结,优先用函数,少用宏

UE4 蓝图——类型 宏(Macro)

[UE4]宏

9、UE4 的游戏框架包含哪些内容?

(1)使用玩家输入或者 AI 逻辑控制 Pawns

Controller 是一个负责指导 PawnActor 。它们通常有两种版本,AIControllerPlayerController。控制器可以 “拥有” 一个 Pawn 来控制它。 PlayerControllerPawn 与玩家控制他之间的接口。其代表了玩家的意志。 AIController 是一个可以控制 Pawn 的模拟意志。

(2)代表世界的玩家、朋友、敌人

Pawn 是一个 ActorPawn 可以被 Controller 持有,他们可以接收输入,可以做很多游戏逻辑。 Character 是一个人形风格的 Pawn,继承自 Pawn。他默认自带一个胶囊体碰撞器角色运 动组件。他可以做到基本的人形移动,他可以平滑的复制移动并且有一些动画相关的功能。

(3)向玩家展现信息

HUD 是一个抬头显示器。可以显示健康、弹药等,每个 PlayerController 通常有一个。 Camera 相当于玩家的眼球并且管理他的行为。每个 PlayerController 通常也有其中一个。

(4)设置与追踪游戏的规则

游戏模式(GameMode)游戏的概念分为两类。GameModeGameState 是游戏的定义, 包括像游戏规则的事情、胜利的条件。它只存在于服务器上。它通常没有太多的数据变化, 也没有客户端需要了解的瞬态数据。

游戏状态(GameState)包括像关联玩家名单得分,那里的作品是一盘棋,或者游戏中的 任务完成列表。GameState 存在于所有服务器与客户端上,可自由复制使所有计算机保持 最新状态。

玩家状态(PlayerState)是游戏参与者的状态PlayerState 包含玩家姓名,得分, 类似 MOBA 的匹配等级。所有玩家的 PlayerState 存在于所有机器上,可以自由复制保持同步。

UE4 - 游戏框架 —— GameMode、GameState、PlayerState、Controller、Pawn

Gameplay 框架快速参考

10、切换关卡的命令是什么?

一般地图比较小,且关卡各自独立的时候,使用 openLevel ,通过输入一个 LevelName 来切换关卡。

当在开放世界,即地图特别大的时候,我们会将多个关卡拼接为一个大世界地图, 然后采用 无缝切换地图的方式,来加载当前的地图。

此时有三个用来驱动转移的主要函数:

  • UEngine::Browse
  • UWorld::ServerTravel
  • APlayerController::ClientTravel

Unreal Engine4 关卡切换

《Exploring in UE4》流关卡与无缝地图切换[经验总结]

多人游戏中的关卡切换

11、UE4 的模块系统

首先:UE4 中模块分为 5 部分:

  1. Developer 主要是跨平台工具,Merge 和一些底层的工具。
  2. Editor 主要是编辑器相关的代码
  3. Programs 主要是独立于引擎,但大多数又依赖引擎的工具,UBT 就在这里
  4. ThirdParty 第三方库或者插件
  5. RunTime 是主要的 Gameplay 等等和游戏相关的代码了。

UE4 模块系统详解

UE4 中的模块(module)介绍

12、简单介绍一下对象系统(UObject 类)和类型系统(UClass 类)。

UObject 类为对象系统的基类。该类的主要作用是存放

  • 对象的名字
  • 标记信息(ObjectFlags
  • 类型信息(ClassPrivate
  • Outer 对象
  • 在对象管理数组中的索引

UClass 类主要用于描述 C++ 中的类信息。在 UE4 在 UClass 实例不仅仅用于描述 C++(Native) 类,也用来描述 Blueprint 生成的类。

UE4 对象系统 _UObject & UClass

13、Core 模块包含了哪些基础类。

  • Core 模块下有很多文件夹:
  • Containers 包含各种 C++ 容器类:ArrayListMapQueueSet 等等
  • Delegates 包含各种代理声明的宏:DECLARE_DELEGATEDECLARE_MULTICAST_DELEGATEDECLARE_EVENT 等等
  • Logging 包含日志功能类和宏:UE_LOGELogVerbosity 等等
  • Math 包含各种数学函数和结构:BoxColorMatrixQuatRangeRotatorVectorUnrealMath 等等

【UE4 源代码观察】观察 Core 模块

14、RHI 模块

RHI 即 RenderHardwareInterface , 即渲染硬件接口, 是 UE 为实现跨平台而实现的一套 API 每个 RHI 接口都为 OpenGL, Vulkan, DX11 等做了不同的实现. 在引擎初始化时使用的绘图 接口就已经确定, 引擎就可以确定 RHI 所使用接口的版本.

【UE4 源代码观察】观察 RHI、D3D11RHI、RenderCore 这三个模块的依赖关系

15、Engine 模块

Engine 模块主要用于定义 Actor 和组件,同时实现了游戏的基本框架。

16、UMG 模块

UMG 模块是虚幻运动图形的简称。 主要用到以下几种文件:

  1. Blueprint( User Inteface-Blueprint) 也就是常说的 UMG ,是我们常用的 UI 工程文件
  2. Font(字体资源拖入 Content Browser 自动生成)字体文件
  3. Texture (PNG 资源拖进来可以自动生成) 图片资源文件
  4. Material 材质文件,可用于 UI 材质或者 mesh 材质
  5. Actor(Blueprint Class-Actor)可以摆放到场景中的文件类型,用于制作 3DUI

UE4 入门之路(UI篇):UMG 系统介绍

ue4 之UMG

17、UE4 中的类型系统

UE4 的宏可以分为四种:UCLASSUSTRUCTUFUNCTIONUPROPERTY。 其中:

  • UCLAS 用于修饰类,
  • USTRUCT 用于修饰结构体,
  • UFUNCTION 用于修饰函数,
  • UPROPERTY 用于修饰变量。

UE4 类型系统、语言修饰符和元数据

UE4 入门-常见的宏 - UCLASS

UE4 入门-常见的宏 - UPROPERTY

UE4 入门-常见的宏 - USTRUCT

UE4 入门-常见的宏 - UFUNCTION


 

你可能感兴趣的:(UE4引擎架构,面试,职场和发展)