找回密码
 立即注册
查看: 648|回复: 0

[简易教程] Mirror + Unity 多人联机游戏的解决方案

[复制链接]
发表于 2021-11-22 15:33 | 显示全部楼层 |阅读模式
本文教程简单明了不拖泥带水,除了前言
Unet是Unity之前多人联机游戏的解决方案。后来在废弃计划里了,他们准备发展MLAPI,目前正在测试开发版本。因为不完善和不稳定所以不推荐商用,今天推荐的Mirror 在AssetStore中可以免费下载且有多款商业项目。

Mirror 本身比较成熟了,开发团队承诺永久免费不断更新,原因是他们团队也在用这个套框架。


自行在AssetStore中下载安装后,可以看到Mirror本身带有例子工程,但都是不完整的,我将结合自身学习和理解带大家走一走完整流程:
游戏大厅(NetworkRoomManager)
新建3个场景,按照Mirror惯例,起名Offline,Room,GamePlay。将这3个场景放到Build中。(File --> BuildSetting)
创建自己的脚本
新建一个文件夹Scripts,在Project鼠标右键->create->mirror :
NetworkRoomManager  ,改名字:MyNetworkRoomManager  
NetworkRoomPlayer,改名字:MyNetworkRoomPlayer
NetworkBehaviour ,改名字:MyPlayer
NetworkBehaviour ,改名字:MyItem
打开Offline场景开始
制作Prefab(挂载脚本)
创建一个空物体,改名RoomPlayer(MyNetworkRoomPlayer
创建一个胶囊,改名Player,(MyPlayer
创建一个立方体,改名Item ,(MyItem
并各自挂载脚本NetworkIndentity,拖拽制成Prefab,删除场景中的这些物体。
挂载场景脚本组件
在Offline场景新建一个空物体(NetworkRoomManager),挂载脚本(MyNetworkRoomManager  )至此,我们创建的脚本都有挂载了。选中这个物体挂载脚本,然后找到如图所示



OfflineScene,OnlineScene,PlayerPrefab,RoomPlayerPrefab,RoomScene,GameplayerScene,一一对应挂载到目标处。
Registered Spawnable Prefabs,是指游戏内生成的物体,比如 一个道具,子弹,敌人。所以这里我们先挂载 Item 这个Prefab。

最后,在这个物体(NetworkRoomManager)上挂载一个快捷Hud的脚本(NetworkManagerHUD),用于UI显示。
至此一个最简单的多人联机底板就做好了,可以先打包一份然后在Unity中运行,Host(启动服务器,并且创建一个客户端连接进来),打包的那一份选择Cline .这时,大厅里可以看到2个玩家。各自点击ready后,就会进入gameplay的场景了。
位置同步
找到Player这个预制体,添加一个新的脚本(NetworkTransform)并且勾选ClientAuthority 这个是重点啊。代表客户端有权限操作。之前心急看了一点文档就自己做,结果在这里吃了亏

打开我们MyPalyer.cs,在Update中
void Update()
{
  if (!isLocalPlayer) return;//只操作本地客户端
  transform.position += new Vector3(Input.GetAxis("Vertical") * Time.deltaTime ,0, Input.GetAxis("Horizontal") * Time.deltaTime );
}
好了,至此,一个简单的 同步完成。
现在可以场景里看到 多人运动了。延迟肯定会有的,不过NetworkTransform的 SendInterval设置为0的,几乎是同步的
后面准备介绍一些Mirror的特性,[Command][ClientRpc][TargetRpc]用于一些其他方面的同步。
更多信息请关注微信公众号:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-25 13:38 , Processed in 0.090582 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表