PhotonUnityNetworking学习笔记(一)

PhotonUnityNetworking学习笔记(一),第1张

PhotonUnityNetworking学习笔记(一) 前言

跟着官方教程学习了几天,想着巩固一下学习到的内容,就写几篇笔记记录一下,顺便列举一下存在的问题,准备着手解决

  • 截止目前实现的内容:
    1.可连接至pun服务器
    2.可多人具名加入同一房间游玩
    3.可进行移动、攻击、退出

  • 存在的问题:
    攻击激光显示不同步

PUN代码框架

1.重要的命名空间、类、接口、以及方法、字段
命名空间:

using Photon.Pun;//主类的namespace
using Photon.Realtime;//实现了Player类,用以存储玩家信息

类:

class  PhotonNetwork//PUN主类
//1.重要的字段
IsConnected//是否连接上服务器
GameVersion//游戏版本
IsMasterClient//是否是存在于Master服务器的客户(client)
PhotonNetwork.PhotonServerSettings.AppSettings.FixedRegion = "cn";//设置固有区域
PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime = "";//设置APPID
PhotonNetwork.PhotonServerSettings.AppSettings.Server = "";//设置服务器
//2.重要的方法
ConnectUsingSettings();//连接到Photon的Master服务器
LoadLevel(string sceneName);//以场景名称为变量加载场景
CreateRoom();//在Game服务器中创建房间
JoinOrCreateRoom();//创建或者加入一个房间

class MonoBehaviourPunCallbacks //实现了PUN重要的回调函数,并且继承自MonoBehaviourPun、MonoBehaviourPun类
//该类中重要的回调函数
OnConnectedToMaster();//连接到服务器时调用
OnDisconnected();//从服务器断开时调用
OnJoinedLobby();//在进入到大厅时调用
OnLeftLobby();//同上相反
OnJoinedRoom();//进入房间时调用
OnJoinRandomFailed();//进入房间失败时调用
OnPlayerEnteredRoom();//当远端玩家进入房间时调用
OnPlayerLeftRoom();//玩家离开房间时调用
class MonoBehaviourPun//组件又photonView字段,用于实现不同玩家间的信息同步
//1.重要的字段
photonView//当前gameObject上的PhotonView组件的引用(reference)
photonView.IsMine//该photonView是否是自己
interface IPunObservable//可观察接口,用以实现玩家间数据同步
OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info);//接口内的方法,可在此方法内实现自定义数据的传送

2.PUN的重要组件

  1. PhotonView 用以显示和管理同步信息
  2. PhotonAnimatorView 用以同步动画
  3. PhotonTranformView 用以同步transform

注:需要将PhotonAnimatorView 、PhotonTranformView 或者实现了IPunObversable接口的组件添加至PhotonView的ObservedComponents中才能实现同步,否则相应回调函数不会被调用。

3.PUN的服务器逻辑

参考链接:https://gitchat.csdn.net/columnTopic/5a39d5a575e5a577886d6c20

1.玩家通过ConnectUsingSettings连接至MasterServer,加入房间时则转入不同的GameServer
2.创建并进入房间时则切换至GameServer中
2.IsConnected判断当前client是否连接至MasterServer/GameServer/在两者之间切换也会返回true
3.IsMasterClient判断当前client是否存在于MasterServer中
参考链接:https://gitchat.csdn.net/columnTopic/5a39d5a575e5a577886d6c20
关于服务器细节,引用一下大佬的讲解

“首先客户端连接到主服务器,他们可以加入游戏大厅,当客户端在主服务器上调用 JoinGame 或 JoinRandomGame *** 作时,主服务器查找运行着的游戏服务器,并返回 IP 地址给客户端。”

“这时他们在主服务器上调用了 CreateGame *** 作,这个游戏服务器不是主服务器实际创建的,而是主服务器仅仅选择了最少工作负荷游戏服务器并将 IP 地址给返回客户端。客户端接收到 IP 地址后会和主服务器断开,通过获得的 IP 地址重新链接对应的游戏服务器。”

“Master Server 跟 Game Server 是一对多的关系,Master Server 能起到负载均衡的作用”

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5351243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-09
下一篇 2022-12-09

发表评论

登录后才能评论

评论列表(0条)

保存