先看一下之前GameMode里的任务完成方法。
最下面的那个是蓝图实现方法在单机版本中是在GameMode蓝图中显示UI
在多人游戏中只有服务端会显示UI
如下是使用专用服务器开的两个客户端(中间都没有显示UI),但是一个进入通关区域内的玩家视野变了,这符合上面PC的设置视野目标逻辑。
如果一个玩家使用监听服务器,另一个玩家使用客户端呢?如下用客户端进入通关区域的时候
客户端的视野变了,服务端的视野没变,服务端显示了UI客户端没显示。
显示UI的逻辑是写在GameMode蓝图里的首先
调用GM→CompleteMission(xx,xx)
只能在服务器执行而且多播函数里没有让客户端显示UI的逻辑。客户端自然不会UI了。其次视角转换使用了PlayerController,PlayerController 在客户端端和服务器都存在。所以使用变更在服务器调用是成功的。当服务器中存在两名玩家会有两个玩家控制器,每个客户端只有当前一个玩家控制器。
UI加载在多人游戏的时候不应该写在GameMode里面。
使用专用服务器测试的时候会有如下错误。
Blueprint Runtime Error: "Accessed None trying to read property CallFunc_Create_ReturnValue". Blueprint: BP_GameMode Function: Execute Ubergraph BP Game Mode Graph: EventGraph Node: Add to Viewport
UI加载在多人游戏的时候应该写在玩家的PlayerController里面。
在创建自己的playerControllerC++类基于Gameplayer框架的playerController。
在头文件里声明蓝图实现事件函数。
在多播中调用这个函数
去掉原来gameMode中的蓝图实现函数
启动编辑器删了原来BP_GameMode里的蓝图实现函数的实现,把逻辑放入
继承自己C++的playercontroller类的蓝图类(BP_PlayerController)。
在BP_GameMode里把默认的playerController设置成BP_PlayerController
现在UI同步了也不会报错误了
但是视角还不同步
因为在GameMode中逻辑只是设置进入区域者的视角
上面这段代码只会在服务器运行只需要把服务器上所有的playerController的视角都改了就行了
现在UI视角都同步了