UE4 多人局域网—— 不同的pawn 分配不一样的颜色

时间:2024-04-04 10:26:39

**

不同的pawn 分配不一样的颜色

**

在多人局域网架构中, 一种比较常见的 应用要求是: 每一个pawn 个体 采用不同的颜色或者不同的 name 进行区别划分。
我们对官方自带的框架进行解析之后,发现 : 官方案例中, 在GameMode 中存储每一个生成的pawn 对应的颜色。 同时通过 Gamemode 分配给每一个 PlayerController , 然后通过Player congtroller 生成pawn ,同时将color 传递给每一个pawn 。
在pawn 蓝图中 , 首先 调用 server 端函数 + 广播函数。 实现 所有拥有此pawn 的 变更颜色。

以上逻辑稍显绕, 按照我们以前常规的逻辑。我们习惯:
在Gamemode 中 调用 postlogin 函数, 直接 在里面进行 pawn的生成。 为了将逻辑更加清晰明了, 我们采用自己的模式。

1, GameMode 中 ,Postlogin 实现对pawn 的逻辑生成。
2,GameMode 中,存储所有生成pawn 对应的color.
3, pawn 蓝图中, 首先 调用server 函数 ,再调用广播函数, 对actor 的 颜色进行变更。

蓝图逻辑关键图如下:

UE4 多人局域网—— 不同的pawn 分配不一样的颜色
ps: listen server 自身也是一个client, 所以只是单独启动一个窗口的时候, postlogin 也会检测到一个角色 也就是自身。
此处我们 做了一个限制, 当检测到两个的时候, 我们才做 pawn 生成。

UE4 多人局域网—— 不同的pawn 分配不一样的颜色
我们截取了 Player Ini 事件的最后一段 重点描述。 我们需要生成的pawn 蓝图 名称为 : BP Tank Pawn. 我们在这个蓝图中 定义一个liner color 类型的变量 , 并设置成 replicated
UE4 多人局域网—— 不同的pawn 分配不一样的颜色
这个变量的类型 一开始我们设置成color ,结果从外部赋值时一直报错,修改为此类型之后,报错消失。

对 Tank pawn 的 颜色变更逻辑流程:

1,初始化时, 创建动态材质实例。
2, 通过 rpc 的 server 函数 和 广播函数 ,实现对拥有此 pawn的 所有pawn 设置 动态材质的参数。

UE4 多人局域网—— 不同的pawn 分配不一样的颜色
上面是创建动态材质实例。
UE4 多人局域网—— 不同的pawn 分配不一样的颜色
RPC server 函数和 广播函数 实现对 此Pawn 以及所有的客户端进行 颜色变更。

UE4 多人局域网—— 不同的pawn 分配不一样的颜色
这是在 BP Tank Pawn 起始阶段, 直接调用 本地的color 进行颜色的同步。 注意 ,我们做了一个延时。 这样可以保证所有的相关pawn 可以实现颜色的变更。 否则可能会出现一个 pawn 颜色无法改变的情况。