
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的概念,为什么要引入这几个概念?