使用PhotonCloud轻松地使用Unity创建在线游戏的一些要点

本文详细介绍了Photon网络系统中各种回调函数的作用与应用场景,包括连接、断开连接、房间操作、玩家进出、数据同步等关键环节,帮助开发者深入理解并有效利用Photon的网络功能。

OnConnectedToPhoton

<span style="color:#222222">/// <summary>
///建立与服务器的初始连接时调用。
/// </ summary>
/// <备注>
///此回调仅用于确定是否可以与服务器进行通信。
///在大多数情况下,OnFailedToConnectToPhoton()或OnDisconnectedFromPhoton()就足够了。
///调用此连接时建立低级别连接。
///此后,PUN将在后台发送AppID,用户和其他信息。
///此外,从主服务器移动到游戏服务器时不会调用它。
/// </ remarks>
void OnConnectedToPhoton(){}
</span>

OnLeftRoom

<span style="color:#222222">/// <summary>
///本地用户,在客户离开房间时调用。
/// </ summary>
/// <备注>
///当你离开房间时,PUN会将你带到主服务器。
///在使用大厅或进入(制作)房间之前,
///将再次调用OnJoinedLobby()或OnConnectedToMaster()。
/// </ remarks>
void OnLeftRoom(){}
</span>

OnMasterClientSwitched

<span style="color:#222222">/// <summary>
///在主客户端离开并切换到新的主客户端后调用。
///旧的主客户端已从播放器列表中删除。
/// </ summary>
/// <备注>
///当此客户端进入房间时,不会调用此回调。
/// </ remarks>
void OnMasterClientSwitched(PhotonPlayer newMasterClient){}
</span>

OnPhotonCreateRoomFailed

<span style="color:#222222">/// <summary>
///对CreateRoom()的调用失败时调用。
///可选参数提供错误代码和错误消息。
/// </ summary>
/// <备注>
///通常,“指定的房间名称已被使用。”
///如果PhotonNetwork.logLevel超过PhotonLogLevel.Informational,
/// PUN记录一些信息。
/// </ remarks>
void OnPhotonCreateRoomFailed(){}
void OnPhotonCreateRoomFailed(object [] codeAndMsg){
 // codeAndMsg [0]是错误代码。(INT)
 // codeAndMsg [1]是一个调试消息。(字符串)
}
</span>

OnPhotonJoinRoomFailed

<span style="color:#222222">/// <summary>
///对JoinRoom()的调用失败时调用。
///可选参数提供错误代码和错误消息。
/// </ summary>
/// <备注>
///经常有“房间不存在”,“已经满了”等。
///如果PhotonNetwork.logLevel超过PhotonLogLevel.Informational,
/// PUN记录一些信息。
/// </ remarks>
void OnPhotonJoinRoomFailed(){}
void OnPhotonJoinRoomFailed(object [] codeAndMsg){
 // codeAndMsg [0]是错误代码。(INT)
 // codeAndMsg [1]是一个调试消息。(字符串)
}
</span>

OnCreatedRoom

<span style="color:#222222">/// <summary>
///创建和进入房间时调用此客户端。
///在此之后,也会调用OnJoinedRoom()。
/// </ summary>
/// <备注>
///仅在创建房间的客户端(PhotonNetwork.CreateRoom)上调用此回调。
///客户端可以随时关闭(或断开连接),
///根据时间,不会调用OnCreatedRoom。
/// 
///如果您需要特定的房间属性或“启动信号”,
///让主客户端检查房间状态,
///实现OnMasterClientSwitched()是安全的。
/// </ remarks>
void OnCreatedRoom(){}
</span>

OnJoinedLobby

<span style="color:#222222">/// <summary>
///在主服务器上进入大厅时调用。
///更新房间列表时调用OnReceivedRoomListUpdate()。
/// </ summary>
/// <备注>
///注意:如果PhotonNetwork.autoJoinLobby为false,
/// OnConnectedToMaster()被调用,房间列表永远不可用。
/// 
///在大厅时,房间列表会定期自动更新。
///(间隔不能改变。)
/// </ remarks>
void OnJoinedLobby(){}
</span>

OnLeftLobby

<span style="color:#222222">/// <summary>
///离开大厅时叫。
/// </ summary>
/// <备注>
///(我不太了解。以下原文)
///当你离开大厅时,[CreateRoom](@ ref PhotonNetwork.CreateRoom)和[JoinRandomRoom](@ ref PhotonNetwork.JoinRandomRoom) 
///自动引用默认大厅。 
/// </ remarks>
void OnLeftLobby(){}
</span>

OnDisconnectedFromPhoton

<span style="color:#222222">/// <summary>
///与Photon服务器断开连接时调用。
/// </ summary>
/// <备注>
///在某些情况下,在OnDisconnectedFromPhoton()之前调用另一个回调。
///示例:OnConnectionFail()或OnFailedToConnectToPhoton()
/// </ remarks>
void OnDisconnectedFromPhoton(){}
</span>

OnConnectionFail

<span style="color:#222222">/// <summary>
///如果连接因任何原因失败,则调用OnDisconnectedFromPhoton()。
/// </ summary>
/// <备注>
///如果无法访问服务器,请改为OnFailedToConnectToPhoton()
调用///并将错误原因作为StatusCode提供。
/// </ remarks>
void OnConnectionFail(DisconnectCause cause){}
</span>

OnFailedToConnectToPhoton

<span style="color:#222222">/// <summary>
///在建立与Photon服务器的连接之前,如果连接调用失败,则调用此方法。
///在OnDisconnectedFromPhoton()之后调用。
/// </ summary>
/// <备注>
///(我不太了解。以下原文)
/// OnConnectionFail仅在首先建立与Photon服务器的连接时被调用。
/// </ remarks>
void OnFailedToConnectToPhoton(DisconnectCause cause){}
</span>

OnReceivedRoomListUpdate

<span style="color:#222222">/// <summary>
///更新房间列表时调用。
///新增和更新之间没有区别。
///仅在主服务器的大厅中调用此方法。
/// </ summary>
/// <备注>
///并非所有大厅类型都向客户提供房间列表通知。
///其中一些专注于服务器端匹配,一些是沉默的。
/// 
/// PUN可以通过PhotonNetwork.GetRoomList()获得房间列表。
///检索的每个项目都是包含自定义属性的RoomInfo。
///在大厅中创建房间时定义了这些信息。
/// </ remarks>
void OnReceivedRoomListUpdate(){}
</span>

OnJoinedRoom

<span style="color:#222222">/// <summary>
///进入房间时叫。(在房间创建或参与时)
///在所有客户端(包括主客户端)上调用此方法。
/// </ summary>
/// <备注>
///此方法通常用于生成玩家角色。
///如果你需要打电话“更积极”
///您可以使用PhotonView.RPC代替。
/// 
///当调用它时
///您是通过PhotonNetwork.playerList
///访问房间里的玩家
///您还可以通过Room.customProperties使用房间自定义属性。
///您可以通过Room.playerCount了解有多少人可以开始游戏。
/// </ remarks>
void OnJoinedRoom(){}
</span>

OnPhotonPlayerConnected

<span style="color:#222222">/// <summary>
///当远程播放器进入房间时调用。
///进入房间的玩家已经被添加到PhotonNetwork.playerList。
/// </ summary>
/// <备注>
///如果您的游戏以特定数字开头,则此回调非常有用。
///检查Room.playerCount,看看你是否可以启动它。
/// </ remarks>
void OnPhotonPlayerConnected(PhotonPlayer newPlayer){}
</span>

OnPhotonPlayerDisconnected

<span style="color:#222222">/// <summary>
///当远程播放器离开房间时调用。
///离开房间的玩家已被排除在PhotonNetwork.playerList之外。
/// </ summary>
/// <备注>
///如果您的客户调用PhotonNetwork.leaveRoom,
/// PUN在其余客户端上调用此方法。
///当远程客户端断开连接时
///几秒钟后超时后将调用此回调。
/// </ remarks>
void OnPhotonPlayerDisconnected(PhotonPlayer otherPlayer){}
</span>

OnPhotonRandomJoinFailed

<span style="color:#222222">/// <summary>
///对JoinRandom()的调用失败时调用。
///可选参数提供错误代码和错误消息。
/// </ summary>
/// <备注>
///通常,“所有房间都满了”“没有房间”。
///如果您使用多个大厅(通过JoinLobby或TypedLobby)
///其他大堂可能有无障碍房间。
///如果PhotonNetwork.logLevel超过PhotonLogLevel.Informational,
/// PUN记录一些信息。
/// </ remarks>
void OnPhotonRandomJoinFailed(){}
void OnPhotonRandomJoinFailed(object [] codeAndMsg){
 // codeAndMsg [0]是错误代码。(INT)
 // codeAndMsg [1]是一个调试消息。(字符串)
}
</span>

OnConnectedToMaster

<span style="color:#222222">/// <summary>
///使用PhotonNetwork.autoJoinLobby是假的,
///与主服务器的连接和身份验证完成时调用。
/// </ summary>
/// <备注>
///如果将PhotonNetwork.autoJoinLobby设置为true,
///而不是这个,调用OnJoinedLobby()。
/// 
///即使您不在大厅,也可以建立或加入一个房间。
///在这种情况下使用默认大厅。
///除非你在PhotonNetwork.joinLobby的大厅,
///可用房间列表不会更新。
/// </ remarks>
void OnConnectedToMaster(){}
</span>

OnPhotonSerializeView

<span style="color:#222222">/// <summary>
///已实现自定义PhotonView定期同步的数据。
///每次PhotonView观察到网络更新时调用。
/// </ summary>
/// <备注>
///在PhotonView监视的脚本上调用此方法。
/// PhotonNetwork.sendRateOnSerialize会影响调用此方法的频率。
/// PhotonNetwork.sendRate会影响此客户端发送包的频率。
/// 
///此方法的实现允许您自定义PhotonView定期同步的数据。
///您的代码可以定义从客户端发送的内容和收到的内容。
/// 
///与其他回调不同,它仅在Scripts设置为PhotonView.observed时调用。
/// 
/// PhotonStream对于使用此方法至关重要。
///客户端编写(PhotonStream.isWriting == true)和
///将读取端的客户端分开以发送/接收数据。
/// 
///如果你不写,PUN将跳过更新。
///这可以节省网络带宽。
/// 
///如果不发送,接收方应注意不调用OnPhotonSerializeView。
///因此,无法执行诸如“每x次接收”之类的处理。
/// </ remarks>
void OnPhotonSerializeView(PhotonStream流,PhotonMessageInfo信息){}
</span>

OnPhoton实例化

<span style="color:#222222">/// <summary>
///当PhotonNetwork.Instantiate生成GameObject(及其子节点)时调用。
/// </ summary>
/// <备注>
/// PhotonMessageInfo参数提供“who”创建“when”。
///(“when”基于PhotonNetworking.time。)
/// </ remarks>
void OnPhotonInstantiate(PhotonMessageInfo info){}
</span>

OnPhotonMaxCccuReached

<span style="color:#222222">/// <summary>
///由于CCU限制(临时)而断开与服务器的连接时调用。
/// </ summary>
/// <备注>
///如果发生这种情况,请在一定时间后再试一次。
///如果发生这种情况,您将无法进入房间,因为它已经断开连接。
///
///您可以通过应用新许可证或扩展订阅来提高CCU限制。
///当达到CCU限​​制时,PhotonCloud将向您发送电子邮件。
///您还可以检查网页上的仪表板。
/// </ remarks>
void OnPhotonMaxCccuReached(){}
</span>

OnPhotonCustomRoomPropertiesChanged

<span style="color:#222222">/// <summary>
///更改房间的自定义属性时调用。
/// ArgumentsThatChanged到Room.SetCustomProperties() 
它包含///设置的所有属性。
/// </ summary>
/// <备注>
///从v1.25开始,这个方法有一个参数。(Hashtable propertiesThatChanged)
///即使在本地更改,也要更改自定义属性
///必须由Room.SetCustomProperties完成。
/// </ remarks>
void OnPhotonCustomRoomPropertiesChanged(Hashtable propertiesThatChanged){}
</span>

OnPhotonPlayerPropertiesChanged

<span style="color:#222222">/// <summary>
///当castap播放器属性发生变化时调用。
///播放器和修改后的属性作为object []传递。
/// </ summary>
/// <备注>
///从v1.25开始,这个方法有一个参数。(object [] playerAndUpdatedProps)
///这包含两个条目。
/// [0]是受影响的PhotonPlayer。
/// [1]是已修改属性的哈希表。
///(我们根据Unity的GameObject.SendMessage规范使用object []。)
/// 
///即使在本地更改,也要更改自定义属性
///必须由PhotonPlayer.SetCustomProperties完成。
/// </ remarks>
void OnPhotonPlayerPropertiesChanged(object [] playerAndUpdatedProps){
    PhotonPlayer player = playerAndUpdatedProps [0]为PhotonPlayer;
    Hashtable props = playerAndUpdatedProps [1]为Hashtable;
    // ...
}
</span>

OnUpdatedFriendList

<span style="color:#222222">/// <summary>
///服务器为FindFriends请求更新PhotonNetwork.Friends,
///发送回复时调用。
/// </ summary>
/// <备注>
/// PhotonNetwork.Friends的朋友列表
///你可以获得名单,在线状态,房间(如果有的话)等等。
/// </ remarks>
void OnUpdatedFriendList(){}
</span>

OnCustomAuthenticationFailed

<span style="color:#222222">/// <summary>
///自定义身份验证失败并断开连接时调用。
/// </ summary>
/// <备注>
///由于用户输入或无效的令牌/机密,自定义身份验证可能会失败。
///如果验证成功,则不会调用此方法。
///实现OnJoinedLobby()或OnConnectedToMaster()(通常)。
/// 
///在游戏开发过程中,由于服务器端的抱歉配置,它可能会失败。
///在这种情况下,记录调试消息非常重要。
/// 
///除非您为应用设置了自定义身份验证(在仪表板上),否则不会调用此方法。
/// </ remarks>
void OnCustomAuthenticationFailed(string debugMessage){}
</span>

OnWebRpcResponse

<span style="color:#222222">/// <summary>
///当PUN收到WebRPC时调用。
///参见PhotonNetwork.WebRPC。
/// </ summary>
/// <备注>
///重要提示:如果Photon可以访问您的WebService,则response.ReturnCode为0。
///响应的内容是您的WebService发送的内容。
///您可以基于此创建WebResponse的实例。
///
///示例)WebRpcResponse webResponse = new WebRpcResponse(operationResponse);
///
///注意:OperationResponse类包含在以下命名空间中。
///使用ExitGames.Client.Photon; 
/// 
/// Photon的OperationResponse.ReturnCode如下所示。
/// 0:好的
///  -  3:未设置Web服务。(检查仪表板,WebHooks)
///  -  5:Web服务当前没有RPC的路径/名称。(至少对于Azure)
/// </ remarks>
void OnWebRpcResponse(OperationResponse response){}
</span>

OnOwnershipRequest

<span style="color:#222222">/// <summary>
///对你来说,是PhotonView的当前所有者
///当其他玩家请求所有权时调用。
/// </ summary>
/// <备注>
/// viewAndPlayer包含两个条目。
/// [0]是目标PhotonView。
/// [1]是发出请求的PhotonPlayer。
/// </ remarks>
void OnOwnershipRequest(object [] viewAndPlayer){
 PhotonView view = viewAndPlayer [0]为PhotonView;
 PhotonPlayer的RequestPlayer = viewAndPlayer [1]为PhotonPlayer;
 // ...
}</span>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值