-
Actor的EndPlay事件在哪些时候会调用?
- 对 Destroy 显式调用
- Play in Editor 终结
- 关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载
- Actor 的生命期已过
- 应用程序关闭(全部 Actor 被销毁)
- 游戏结束
见:Actor生命周期
-
BlueprintImplementableEvent和BlueprintNativeEvent之间有什么区别?
-
用BlueprintImplementableEvent标明的函数在C++代码中不需要有方法体,方法体在蓝图中实现。
-
如果定义函数UFUNCATION时使用BlueprintNativeEvent标识,表示期望该函数在蓝图被重写(override)(这里的重写指的是定义一个自定义事件Custom Event),同时又拥有C++的实现方法,那么定义函数时,除了自身的方法名以外,还需要加一个后缀_Implementation,并在C++实现这个函数“函数名_Implementation”。这样定以后,会优先调用蓝图中的Event,如果蓝图中该Event没有方法体,则调用C++的方法_Implementation。
/** Override in BPs to power up bombs. */ UFUNCTION(BlueprintNativeEvent, Category = "Game") int32 AAAA(); int32 AAAA_Implementation();
-
-
BlurprintPure在什么时候使用?
这是一个可以从蓝图中调用的原生函数,它执行原生代码,不会修改调用它的对象的任何内容,也不会修改任何其他的全局状态。
这意味着调用该代码不会修改任何内容,它仅是取入输入,并向您提供一个输出。
像数学节点(+ 、 - 、 * 等)、变量获取节点、或者任何不永久性地修改任何内容的东西都属于这类内容。
这些内容不需要规划如何执行,它们没有线连接到白色执行线。编译器会根据哪个BlueprintCallable节点需要这些节点处理的数据来自动地辨别出他们。 -
UE4的蓝图中对于Foreach等循环采用的是类似并行的方式,试实现一个串行的方法。
-
如何解决子弹穿墙问题?
LineTracebyChannel只要击中一个物体就会停止。
-
UE4对UStruct的内存会自动管理吗?
只有UPROPERTY宏标记的USTRUCT才能被计入垃圾回收
-
Blueprintable和BlueprintType的意义
默认情况下上边的UCLASS() 宏同下图中UCLASS(Blueprintable)的作用是一样的。这样声明的类在UE4中是可以创建基于此类的蓝图子类。
如果不想让C++类能创建蓝图子类,则只需把 Blueprintable 替换为NotBlueprintable.
在UCLASS()宏参数中还有一个名为NotBlueprintType的宏,这个宏的意思是在蓝图中无法创建基于此c++类的变量。而基于此C++类的蓝图子类则不受此限制。
BlueprintType这个宏的意思是在蓝图中可以创建基于此c++类的变量。 -
UE4 入门宏
EditAnyWhere: 此成员变量在蓝图编辑器中和关卡细节面板中都会被暴露出来。
VisibleAnywhere:指示此属性在所有属性窗口中都可见,但无法编辑。EditDefaultsOnly: 此成员变量只会在蓝图编辑器中被暴露出来。
VisibleDefaultOnly:表示此属性仅在原型的属性窗口中可见,并且不能被编辑。EditInstanceOnly: 此成员变量只会在关卡细节面板中被暴露出来。
VisibleInstanceOnly: 表示此属性仅在实例的属性窗口中可见,而不在原型中显示,且无法编辑。Transient:属性是暂时的,这意味着它不会被保存或加载。以这种方式标记的属性在加载时将被填满。
-
UE4的游戏框架包含哪些内容?
使用玩家输入或者AI逻辑控制Pawns
Controller是一个负责指导Pawn的Actor。它们通常有两种版本,AIController和PlayerController。控制器可以“拥有”一个Pawn来控制它。
PlayerController是Pawn与玩家控制他之间的接口。其代表了玩家的意志。
AIController是一个可以控制Pawn的模拟意志。代表世界的玩家、朋友、敌人
Pawn是一个actor。Pawn可以被Controller持有,他们可以接收输入,可以做很多游戏逻辑。
Character是一个人形风格的Pawn,继承自Pawn。他默认自带一个胶囊体碰撞器和角色运动组件。他可以做到基本的人形移动,他可以平滑的复制移动并且有一些动画相关的功能。向玩家展现信息
HUD是一个抬头显示器。可以显示健康、弹药等,每个PlayerController通常有一个。
Camera相当于玩家的眼球并且管理他的行为。每个PlayerController通常也有其中一个。设置与追踪游戏的规则
游戏模式(GameMode)游戏的概念分为两类。GameMode与GameState是游戏的定义,包括像游戏规则的事情,胜利的条件。他只存在于服务器上。他通常没有太多的数据变化,也没有客户端需要了解的瞬态数据。
游戏状态(GameState)包括像关联球员名单得分,那里的作品是一盘棋,或者游戏中的任务完成列表。GameState存在于所有服务器与客户端上,可自由复制使所有计算机保持最新状态。
玩家状态(PlayerState)是游戏参与者的状态,PlayerState包含玩家姓名,得分,类似MOBA的匹配等级。所有玩家的PlayerState存在于所有机器上,可以自由复制保持同步。 -
切换关卡的命令是什么?
OpenLevel -
UE4 模块
Developer主要是跨平台工具,Merge和一些底层的工具。
Editor主要是编辑器相关的代码
Programs主要是独立于引擎,但大多数又依赖引擎的工具,UBT就在这里
ThirdParty第三方库或者插件
RunTime是主要的Gameplay等等和游戏相关的代码了。
Plugins 插件模块。 -
CoreUObject主要是包含虚幻引擎的对象系统(UObject)和类型系统(UClass)
UObject是引擎所有对象的基类,提供了对象的反射、序列化、GC等功能
UClass是UObject对象的反射对象,记录了大量UObject的对象数据;这些记录的对象数据帮助 -
Core模块主要包含了C++相关的基础类
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等等 -
RHI模块
RHI即RenderHardwareInterface, 即渲染硬件接口, 是UE为实现跨平台而实现的一套API. 每个RHI接口都为OpenGL, Vulkan, DX11等做了不同的实现. 在引擎初始化时使用的绘图接口就已经确定, 引擎就可以确定RHI所使用接口的版本.
-
Engine 模块
Defines actors and components, and implements the game framework.
定义actor和组件,同时实现了游戏的基本框架。 -
InputCore 模块
Key definitions and related code
键定义和相关代码 -
UMG 模块
Unreal Motion Graphics. Unreal’s data-driven UI framework built on top of Slate. Work in progress.
虚幻用户图形接口。建立在Slate之上的数据驱动的虚幻UI框架。
参考:UE4面试题