为Unity游戏搭建SpringBoot的服务端实现多人同步 您所在的位置:网站首页 unity服务器部署 为Unity游戏搭建SpringBoot的服务端实现多人同步

为Unity游戏搭建SpringBoot的服务端实现多人同步

2024-07-18 07:30| 来源: 网络整理| 查看: 265

大家好久不见,最近在研究Unity中多人游戏的实现,要保证在同一游戏里不同玩家所用的客户端之间的状态保持同步,需要配置统一的服务器来分发玩家状态的列表,以在客户端完成多人状态的更新。

做一个小的联机Demo,传输玩家的位置、水平转角,动画状态等信息,通信的逻辑是当客户端将玩家的信息更新到服务端的同时,将状态信息储存在服务端,服务端再响应给客户端当前游戏所有玩家的状态信息列表。

为什么要用Java的SpringBoot框架来搭服务器呢,是由于最近刚好学了Java和SpringBoot的一些知识,想着自己动手熟悉一下,当然如果有大佬能指出一些不足的地方就更好啦。网上找了一些SpringBoot集成WebSocket的用例之后,直接开干!

先来看看效果吧:

 

分别介绍一下服务端和客户端的实现:

服务端:

SpringBoot项目的代码结构如下:

SpringBoot服务端的项目结构

首先,在application.yml配置服务器端口:

pom.xml中引入WebSocket和Json相应的依赖:

然后创建消息类Message和玩家信息类PlayerInfo两个实体类:

接下来编写SpringBoot的三层架构。主要的逻辑为,当Controller层收到客户端的数据包后,通过注解@OnMessage调用onMessage方法,将数据包交给Service层处理,然后通过Service请求返回当前所有玩家的状态列表,打包成Message再转换Json格式发送给客户端。

客户端与SpringBoot服务端的三层架构通信

Controller层是负责和前端(客户端)打交道的,为了实现简单,这里采用了WebSocket来进行信息的接发,代码如下:

顺着这个思路,Service层就负责两件事,一个是将收到的数据保存到数据库中的玩家状态列表,一个是将数据库中的玩家状态列表返回出来。代码如下:

Mapper层负责和数据库打交道,为了简单起见,这里就不涉及数据库的存储,先将玩家状态列表保存至Mapper层

ok,简单的服务端就搭建好了,当多个玩家通过这个端口访问服务器时,就可以实时同步他们的信息。如果后面时间允许,应该还得补上数据库的访问以及各种异常处理。下面来看看客户端的一些主要代码。

Unity客户端

创建PlayerInfo.cs脚本构造玩家状态类

创建UserClient.cs脚本负责管理与服务端的连接和数据收发,在Start函数中,进行服务端的连接。并且在Update函数中将当前玩家的状态定时传至服务端,并等待服务端响应玩家状态信息列表。注意利用WebSocket定时收发操作均为异步进行。

创建PlayerPool.cs脚本用于处理玩家状态的更新(如位置、角度的变换、动画参数等)这里因为要在静态函数里调用该类的方法,注意要创建单例模式。

在玩家控制的函数中,可以更新当前玩家的状态信息。这里可以我放在的控制玩家移动的函数Move()中。

将脚本挂载到场景中

挂载脚本

大功告成,打开服务端,然后开启多个客户端,就能看到多个玩家在场景中啦。

不过由于目前的玩家状态信息很有限,如跳跃、攻击、血量等还没做,如果后面条件允许也会补上的(画饼)

参考教程:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有