|
本文教程简单明了不拖泥带水,除了前言
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]用于一些其他方面的同步。
更多信息请关注微信公众号: |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|