Unity Mirrio 基础构建方式(两种)
2024-05-08 15:12:18    5    0    0
akiragatsu

没搞清楚confluence上如何插入markdown...


个人理解的两种方式 ##方式一 房间模式:(自带一个需要准备等待功能的模式)

###创建场景 Offline,Room,GamePlay 作用:区分Online和非Online模式

###准备脚本 通过create->mirror 创建如下脚本

[NetworkRoomManager] 作用:房间管理,有房间创建,连接,等房间相关的回调 基于房间补充相关逻辑

[NetworkRoomPlayer] 作用:包含房间里的玩家状态和回调

[NetworkBehaviour]

创建多个NetworkBehaviour : 如,NetworkBehaviour 改为 myPlayer NetworkBehaviour 改为 myItem 作用: 有了本脚本,才会标记告知服务器需要同步本对象 继承了MonoBehaviour的Network脚本, 可以衔接Update等函数书写自己的逻辑, 取到玩家网络状态,如

isServer
如果是此对象是在服务器上运行的(包括服务器+客户端一体的主机),则返回true
isServerOnly
如果是此对象仅在服务器运行的(而非包含客户端的主机),则返回true
isClient
如果此对象已经存在,且处于客户端上(包括主机的客户端),则返回true

等等

###准备预制体 创建空物体,命名为RoomPlayer,挂MyNetworkRoomPlayer 创建胶囊,命名为Player,挂MyPlayer 创建Cube, 命名为Item 挂myItem

客户端操作权限: Player预制体上的挂NetworkTransform脚本的ClientAuthority 一定要勾选上,否则没有客户端操作其状态的权限。

在玩家或者我物体预制体上挂载,NetworkIdentity 脚本 (往往挂载其他Mirror脚本时,NetworkIdentity脚本会自动挂载)

###创建管理组件

1.在Offline场景空物体,挂MyNetworkRoomManager脚本 挂载好在线和离线对应的场景,Player预制体,以及房间相关的预制体和场景

title


2.同时挂上NetworkManagerHUD,
启动时开启Host服务器和连接的显示UI

title



写一个简单的操作

在myPlayer脚本(NetworkBehaviour)中加入移动操作。

void Update()
    {
      if (!isLocalPlayer) return;//只操作本地客户端
      transform.position += new Vector3(Input.GetAxis("Vertical") * Time.deltaTime ,0, Input.GetAxis("Horizontal") * Time.deltaTime );
    }


### 测试同步

添加所有场景到Buildsetting,然后打包,两端互联
    一个选Host(Server+Client)开启服务器主机
    另一个或者几个端 点Client 连接ip 或者localhost
    然后所有人点Ready,游戏和同步开始
    会NetworkBehaviour脚本下的对象状态进行同步
    
##方式二 普通模式

####创建管理
场景中 创建空物体改名为NetworkManager,
挂载脚本NetworkManager,KcpTransport,NetworkManagerHUD

####创建玩家
创建一个胶囊提,挂载脚本NetworkIdentity
只有挂载了NetworkIdentity,网络中枢才能识别到这个物件,并对之进行同步。
然后拖拽本胶囊体到上面到场景中的NetworkManager中Player Prefab


#### 打包,运行两个示例
    分别创建主机Host,和点Client,进入游戏会同步玩家进入和销毁

 

Pre: 项目网络同步时序总览 & 快照宏观管理试梳理文档(逐渐更新……)

Next: 皓月BF3 COOP双人联机使用教程

5
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content