UE4面试基础知识(二)

1、在客户端是否可以获取到AIController?

不可以,在DS(dedicated server)模型下,AIController只存在于服务端,其主要是通过在服务端对Pawn进行操控,
然后再同步到客户端。

UE4 AIController
设置专用服务器

2、客户端上面能够执行RPC的对象有哪些?

RPC(远程过程调用),是在本地调用但能在其他机器(不同于执行调用的机器)上远程执行
的函数。
在客户端上能够执行RPG的对象需要满足:
(1)该Actor必须被复制
(2)如果RPC是从客户端调用并在服务器上执行,客户端就必须拥有调用RPC的Actor。
(3)如果是多播RPC是个例外:
当从客户端调用时,只是在本地运行而非服务器上执行。

RPC

3、如果在C++中需要使用windows的头文件,如何操作?

#include “AllowWindowsPlatformTypes.h”
#include 
#include “HideWindowsPlatformTypes.h”

关于UE4引用windows头文件的类型冲突
[UE4][C++]使用Windows的SOCKET

4、在头文件中经常出现的xxx.generated.h是什么?

当一个头文件中 include “xxx.generated.h“,意味着这个头文件加入了反射系统。那些 
UPROPERTY, UFUNCTION 之类的宏,也标记着这些方法属性等等加入了 UE4 的反射系统,
加入了反射系统,UE4 才能帮你做 GC(垃圾回收),你才能实现蓝图、C++ 通信等等很多功能。

【UE4】“xxx.generated.h”

5、对一个Actor调用AIMoveTo失败了,其可能原因是什么?

(1)未放入NavMesh和NavRecast.
(2)Nav导航组件设置太大,也可能会导致失效
(3)目标点超出Nav导航范围。

UE4 AI移动到 出现的BUG以及解决方案

6、试说出宏、函数、事件的部分区别和联系

函数与事件的区别:
1、函数有返回值,事件无返回值
2、函数调用会等待函数执行结果,事件调用只是触发但不会等待。
3、函数执行在同一个线程,事件执行在不同线程。
4、函数可以用局部变量,事件没有局部变量。
5、因为函数执行顺序有保证,所以优先使用函数
6、没有返回值的函数,在被子类Overide时,会变成事件。
宏与函数的区别在于:
(1)宏是直接展开,即直接将宏的代码直接复制替换到所有使用当前宏的地方,
这点类似于c++中的宏,而函数则是需要编译。
(2)宏运行时无实体,函数运行时有实体。
(3)宏有多个入口Exec多个出口Exec,函数只有一个入口Exec一个出口Exec。
(4)宏可以使用Delay,函数不可以使用Delay。
(5)宏不可以复制,函数可以复制。
(6)宏的参数可以使用“Exec”类型,函数不可以

[UE4]函数和事件的区别
[UE4]宏

7、试使用C++实现一个对蓝图中任意Actor排序的框架。

(1)创建蓝图宏库,鼠标右键->Blueprints->Blueprint Macro Library ->
All Classes->Object,以UObject作为蓝图宏库的基类。
(2)My Blueprint窗口,Add New创建二个宏Select Sort、Bubble Sort;
(3)实现代码逻辑
Description:
选择排序(详情请查阅选择排序方法)
bGreater=( Array[min] >Array[i] ) ? true : false;
将Array[min]与Array[i]成员的大小比较结果连接上bGreater(pin)
内部循环根据bGreater(bool)值判断是否交换Array[min]与Array[i]成员位置
排序结束,返回有序数组

第1期 在蓝图实现任意类型数组排序

8、客户端上面对一个Actor中的RPC事件调用失败,可能原因是什么?

(1)该Actor不可被复制
(2)其他的客户端上,未拥有可以调用RPC的Actor。
(3)在Pawn派生类的蓝图收到Possessed事件时,Connection->ViesTarget还未被赋值。

ue4 rpc调用不起作用
RPC

9、UE4中的RPC事件有哪些?

RPC主要包括Multicast(广播)、Run On Server(在服务端执行)和Run On Owning Client
(在客户端执行)三种类型。其中广播类型在服务器上调用执行,然后自动转发给客户端;
在服务端执行的函数有客户端调用,然后仅在服务器执行。在客户端执行的函数由服务器
调用,然后仅在自己的客户端上执行。

UE4网络之(二) 远程调用函数(RPC)

10、如何设置Actor的同步间隔?

更改Actor中的:NetUpdateFrequency 网络更新频率属性。

深入浅出UE4网络
UE4网络同步属性笔记

11、若需要实现一个多播事件,如何操作?

不是很理解这个问题问的是网络的多播,还是多播委托。
网络的多播:(1)先使用"Switch Has Authority"判断是否在服务器端。然后在事件的
Detials中将Replacates设置为Multicast。
(2)先创建一个只在服务端运行的事件,然后由该事件去执行播放方法。
多播委托:
(1)构建动态代理
(2)在类内部声明动态代理对象
(3)在蓝图中绑定
(4)在CPP中执行多播委托。

[UE4]多播(广播)
UE4在C++中实现多播通知到蓝图(动态代理应用)

12、连接服务器的命令是什么,如何传递参数?

连接服务器的命令是Socket->Connect(*addr);
其中的*addr是InternetAddr指针,用于传递IP和Port。

UE4 客户端与服务器的通信
UE4基础三:客户端服务器连接流程
网络概述

13、为什么需要TWeakPtr?

TWeakPtr不会参与应用技术,当TWeakPtr指向的对象不存在共享指针指向时,TWeakPtr将
自动失效,所以该指针的时候需要有效性判断。用于非UObject类,想要引用它又不想因为引
用它而影响引用计数时。

【UE4】共享(智能)指针用法
TWeakptr,TWeakObjectPtr和TSoftPtr的概念,为什么要引入这几个概念?

你可能感兴趣的:(UE4,ue4,游戏引擎)