**
不同的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 的 颜色进行变更。
蓝图逻辑关键图如下:
ps: listen server 自身也是一个client, 所以只是单独启动一个窗口的时候, postlogin 也会检测到一个角色 也就是自身。
此处我们 做了一个限制, 当检测到两个的时候, 我们才做 pawn 生成。
我们截取了 Player Ini 事件的最后一段 重点描述。 我们需要生成的pawn 蓝图 名称为 : BP Tank Pawn. 我们在这个蓝图中 定义一个liner color 类型的变量 , 并设置成 replicated
这个变量的类型 一开始我们设置成color ,结果从外部赋值时一直报错,修改为此类型之后,报错消失。
对 Tank pawn 的 颜色变更逻辑流程:
1,初始化时, 创建动态材质实例。
2, 通过 rpc 的 server 函数 和 广播函数 ,实现对拥有此 pawn的 所有pawn 设置 动态材质的参数。
上面是创建动态材质实例。
RPC server 函数和 广播函数 实现对 此Pawn 以及所有的客户端进行 颜色变更。
这是在 BP Tank Pawn 起始阶段, 直接调用 本地的color 进行颜色的同步。 注意 ,我们做了一个延时。 这样可以保证所有的相关pawn 可以实现颜色的变更。 否则可能会出现一个 pawn 颜色无法改变的情况。