UE4面试基础知识(一)
1、Actor的EndPlay事件在哪些时候会调用?
EndPlay - 在数个地方调用,保证 Actor 的生命走向终点。在游戏过程中,如包含流关卡的
Actor 被卸载,Destroy 将发射此项和关卡过渡。调用 EndPlay 的全部情形:
(1)对 Destroy 显式调用
(2)Play in Editor 终结
(3)关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载
(4)Actor 的生命期已过
(5)应用程序关闭(全部 Actor 被销毁)
2、BlueprintImplementableEvent和BlueprintNativeEvent之间有什么区别?
BlueprintImplementableEvent和BluuprintNativeEvent两者都是函数标记,用于修饰
函数的。
BlueprintImplementableEvent:在C++可以声明函数(不能定义,蓝图重写),
在C++里调用该函数,蓝图重写实现该函数
BlueprintNativeEvent:在C++可以声明和定义函数,在C++里调用该函数,蓝图重写
实现该函数(蓝图可以重写或不重写C++父类函数)
使用方法:
UFUNCTION(BlueprintImplementableEvent) void TestA();
UFUNCTION(BlueprintNativeEvent) void TestB();
UE4函数标记BlueprintImplementableEvent和BlueprintNativeEvent区别
3、BlueprintPure在什么时候使用?
BlueprintPure的特点是在C++和蓝图中都可以调用,但是其修饰的函数必须有函数返回值或
函数参数输出,否则会编译失败。被声明的函数不会以任何方式拥有对象,并且可以在蓝图
或级别蓝图图标中执行。
因此,BlueprintPurs修饰的函数,主要用于(1)数学中的“+、-、*、/”操作 (数值处理),
(2)变量获取节点(获取变量中的部分数据)
UE4入门-常见的宏-UFUNCTION
UE4的BlueprintPure用法
4、UE4的蓝图中对于Foreach等循环采用的是类似并行的方式,试实现一个串行的方法。
首先需要了解并行和串行的区别。
并行通讯:同一时刻,可以一次性执行多步。
串行通讯:同一时刻,只能一步一步的执行。
for(int i=0;i<10;i++);//所以我自己写个循环,不开多线程应该就可以了吧。毕竟没有
找到标准答案,只能自己猜测了。求大佬,教教我。
5、如何解决子弹穿墙问题?
如果采用的是射线检测的话,LineTracebyChannel函数只会返回首个命中对象。
但为了防止真出现子弹穿墙问题,
我们可以让LineTracebyChannel只要击中一个物体就会停止射线检测。
如果采用的是为子弹单独制作成一个物体的话,
在射击时,只要将墙体和子弹的碰撞属性设为Block,便会阻止子弹继续前进。
6、UE4对USTRUCT的内存会自动管理吗?
不会,
只有使用UPROPERTY宏标记的USTRUCT才能被计入垃圾回收。
UE4入门-常见的宏-UPROPERTY
UE4入门-常见的宏-USTRUCT
7、Blueprintable和BlueprintType的意义
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)宏中定义局部变量,只能使用基本数据类型,不能使用类类型。
宏 :执行快,功能更强,但占据空间多,安全性差
函数:执行较慢,占空间少,安全性高
个人总结,优先用函数,少用宏
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
Gameplay框架快速参考
10、切换关卡的命令是什么?
一般地图比较小,且关卡各自独立的时候,
使用openLevel,通过输入一个LevelName来切换关卡。
当在开放世界,即地图特别大的时候,我们会将多个关卡拼接为一个大世界地图, 然后采用
无缝切换地图的方式,来加载当前的地图。
此时有三个用来驱动转移的主要函数:
UEngine::Browse、
UWorld::ServerTravel、
APlayerController::ClientTravel。
Unreal Engine4关卡切换
《Exploring in UE4》流关卡与无缝地图切换[经验总结]
多人游戏中的关卡切换
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所使用接口的版本.
【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
17、UE4中的类型系统
UE4的宏可以分为四种:UCLASS、USTRUCT、UFUNCTION、UPROPERTY。
其中: UCLASS用于修饰类,
USTRUCT用于修饰结构体,
UFUNCTION用于修饰函数,
UPROPERTY用于修饰变量。
UE4类型系统、语言修饰符和元数据
UE4入门-常见的宏-UCLASS
UE4入门-常见的宏-UPROPERTY
UE4入门-常见的宏-USTRUCT
UE4入门-常见的宏-UFUNCTION
问题参考:
UE4基础总结