没搞清楚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预制体,以及房间相关的预制体和场景
2.同时挂上NetworkManagerHUD,
启动时开启Host服务器和连接的显示UI
写一个简单的操作
在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,进入游戏会同步玩家进入和销毁
No Leanote account? Sign up now.