UE4随机地图生成+联网同步思路

时间:2024-05-20 14:51:49

需求背景:在联网环境下,实现地图资源随机生成并且同步。

思路是:将随机数据和地图生成资源逻辑分开编写。

逻辑流程这样:由GameMode生成一次需要用到的随机数据,然后每个客户端链接时都传入这个随机值,接着执行生成逻辑。

效果如下,

可以看到两个窗口中的资源都是同一个随机的效果。

UE4随机地图生成+联网同步思路

 

具体逻辑:

GameMode~PlayerController逻辑,GM第一次更新数据(不写在BeginPlay是因为调试模式GM开始函数在第一个玩家Login之后调用,导致作为服务器的窗口没有获取到数据),接下来每次玩家登录都会把随机的数据传给玩家控制器。右边是玩家控制器的逻辑,生成了一个地图管理类专门负责生成地图资源。这个类和玩家类分开是为了方便修改生成的内容。其中RPC事件是RunOnOwningClient,仅在客户端调用.

UE4随机地图生成+联网同步思路

 

函数细节:

1.GameMode中处理随机数据的生成。

GM中的生成函数:通过预设的长宽相乘获得需要保存的对象数量。然后循环给成员赋值随机值,需要其他随机信息的可以添加。

UE4随机地图生成+联网同步思路

2,地图管理类中的生成逻辑函数,UE4随机地图生成+联网同步思路

由GM传过来的随机类型和随机旋转。然后用EachLoop遍历所有对象,由于之前随机存进去了不同的数值,这里switch的时候就能产生物体序列随机的效果,旋转也是。后面用到了StaticInstance,这个是专门对重复静态网格做优化的类,测试中5000个以内的物体基本上是秒生成。

组件UE4随机地图生成+联网同步思路

比一般的static属性栏中多了个instanceUE4随机地图生成+联网同步思路

点加号就等于这个节点UE4随机地图生成+联网同步思路

 

最后随机地图的同步就完成了,具体的生成逻辑可以在生成类中进行修改.还可以添加随机位置,场景遮挡检测等逻辑.