前言
跟着官方教程学习了几天,想着巩固一下学习到的内容,就写几篇笔记记录一下,顺便列举一下存在的问题,准备着手解决
PUN代码框架
1.重要的命名空间、类、接口、以及方法、字段 命名空间:
using Photon.Pun;
using Photon.Realtime;
类:
class PhotonNetwork
IsConnected
GameVersion
IsMasterClient
PhotonNetwork.PhotonServerSettings.AppSettings.FixedRegion = "cn";
PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime = "";
PhotonNetwork.PhotonServerSettings.AppSettings.Server = "";
ConnectUsingSettings();
LoadLevel(string sceneName);
CreateRoom();
JoinOrCreateRoom();
class MonoBehaviourPunCallbacks
OnConnectedToMaster();
OnDisconnected();
OnJoinedLobby();
OnLeftLobby();
OnJoinedRoom();
OnJoinRandomFailed();
OnPlayerEnteredRoom();
OnPlayerLeftRoom();
class MonoBehaviourPun
photonView
photonView.IsMine
interface IPunObservable
OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info);
2.PUN的重要组件
- PhotonView 用以显示和管理同步信息
- PhotonAnimatorView 用以同步动画
- 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 能起到负载均衡的作用”
|