【Unity网络游戏学习笔记】(2) 快速创建你的第一个Mirror服务/客户端游戏(一) 您所在的位置:网站首页 unity服务器插件 【Unity网络游戏学习笔记】(2) 快速创建你的第一个Mirror服务/客户端游戏(一)

【Unity网络游戏学习笔记】(2) 快速创建你的第一个Mirror服务/客户端游戏(一)

2024-05-22 17:51| 来源: 网络整理| 查看: 265

   此文章已同步到我的博客噢~~:https://juejin.cn/user/3782794041628862

简介

  为了体现Mirror的优势和基本使用方法,我们来快速走一遍Mirror创建一个服务端与客户端游戏的最基本的流程与一些相关功能。这一章节仅仅是为了让你窥见Mirror插件使用的大致流程,因此只需跟着做并初步理解个大概即可~~ 接下来的笔记都会对其中使用的API做出更详细的介绍。

目标

   我们接下来要用Mirror做出一个服务端和客户端,分别实现这些功能:

服务端开启后,多个玩家可以从他们的客户端游戏中连接进去

客户端连接成功后,每个玩家能且只能控制其游戏角色(一个方块)

玩家在他们的键盘上按下WSAD后,服务端让其移动,并将他们的位置实时同步到其它客户端中

玩家按下空格键后,服务端为它们的角色随机变色,并将颜色同步到所有客户端上

第一部分

1. 新建工程,导入Mirror插件

2. 在场景中添加一个空物体,并为该物体添加NetworkManager组件:

NetworkManager是Mirror的中枢组件, 控制服务端/客户端的建立和链接,以及数据的传输。可以理解成联网的GameManager。一般来说,每个需要做联网的场景都需要有这样一个组件。当然这个会在下一篇文章中详细介绍。

此外,还可以看到Mirror为该物体自动添加了一个Kcp Transport组件,也就是KCP协议组件。这个组件还能换成TCP Transport、Telegraphy Transport等。当然这些都会在以后介绍,现在我们先不管它 = =

3. 接着,我们需要制作一个玩家的Prefab,我们用一个Cube表示即可:

4. 在Mirror中,所有联网的、需要在多个客户端间同步的游戏物体都需要拥有一个NetworkIdentity组件,该组件使一个物体在所有客户端中拥有一个唯一的标识,并使服务端能够管理它。所以我们的玩家物体也需要添加NetworkIdentity组件:

- 我们暂时不需要设置其属性,在以后的文章中会详细介绍

5. 完成后,保存Prefab

6. 在Mirror中,玩家的Prefab是一个特殊的物体。每当有一个客户端连接入服务端后,NetworkManager都会在场景中生成一个该客户端的玩家Player物体,并将该玩家物体的初始位置同步到所有其他客户端中。我们需要在NetworkManager的Player Object属性中,添加刚才创建的Prefab:

- Auto Create Player: 是否在有玩家连接入服务端后自动生成其Player Prefab。这里我们打勾- Player Spawn Method: 先不管它,后面会介绍。先维持Random

7. 实际上,虽然我们现在还没有实现任何功能,但是此时一个最最最最基本的服务端和客户端已经完成了。如果我们现在打包的话,在服务端运行后,每当有客户端连接时,都会在原点生成一个玩家的物体,我们在下面测试一下:

打包、运行服务端和客户端

1. 在此之前,由于我们没有写连接和启动服务器的代码,我们可以先使用Mirror自带的连接功能 -- 为NetworkManager添加NetworkManagerHUD组件:

2. 这样,在启动游戏后,左上角会有一个非常丑陋(划掉)的UI,以帮助我们连接/启动服务器:

3. 我们直接打包游戏(PS. 直接build就完事了(PPS. 当然一般游戏要专门打服务端和客户端包,但是对于我们现在的简单示例直接打也ok  (PPPS. 当然后面都会讲)))

4. 启动游戏。我们需要多启动几个来模拟多个客户端为了能更直观地调试,我们把Unity中的也启动一下

5. 启动完成后应该是上面那样的。此时游戏中什么都没有,这是因为服务端还未启动,客户端也没有连接。

为了方便调试,我们使Unity端成为服务端,点击Server Only即可

6. 可以看到我们的服务器已经成功启动了。现在我们到客户端中,点击Client按钮作为客户端连接我们本机的服务端(如果连接失败的话可以把输入框中的localhost改成127.0.0.1)

7. 连接成功后就能像上图中那样看到我们的两个客户端的玩家都成功地生成在游戏中了!

但是因为我们没有设置出生点位置(后面会讲),所以所有加入的客户端的游戏物体都默认生成在原点,所以是重叠的状态。但是我们可以在Unity服务端的Hierarchy中看到有两个Player,这就说明两个玩家都在游戏中了:

同时我们可以注意到每个玩家的名字上都有一个 "connId" 的标签,这个标签就是 NetworkIdentity组件分配的唯一标识符了。

第一部分 总结

虽然我们到目前为止没有写一行代码,但是一个非常非常简单的服务端和客户端已经成功创建好了,且玩家可以通过ip连接到不同的游戏服务器中。

我们再来回顾一下我们开始的目标:

服务端开启后,多个玩家可以从他们的客户端游戏中连接进去

客户端连接成功后,每个玩家能且只能控制其游戏角色(一个方块)

玩家在他们的键盘上按下WSAD后,服务端让其移动,并将他们的位置实时同步到其它客户端中

玩家按下空格键后,服务端为它们的角色随机变色,并将颜色同步到所有客户端上

目前为止,我们已经0代码实现了前两个目标(当然第二个目标暂时还没有很好地体现出来),并且对Mirror的使用有了一个初步的认识。在下一篇文章中,我们将用代码和Mirror提供的API实现剩下的两个目标,敬请期待!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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