我有一种方法,在其他地方调用或通过ui按钮调用时效果很好。
我遇到了这个问题: 本地播放器断开连接之前,我需要调用此方法。
如果我使用“ OnPhotonPlayerDisconnected()”,它将无法正常运行,因为它是从远程播放器而不是本地播放器调用的。
我还测试了“ OnLeftRoom()”方法,但它甚至没有调用。
我的方法在这里
public void ReleaseSlot()
{
Slots[slotIndex] = true;
Hashtable updateScore3 = new Hashtable();
updateScore3.Add("teamslot" + slotIndex.ToString(), false);
PhotonNetwork.room.SetCustomProperties(updateScore3, null, false);
alreadyJoined = false;
}
答案 0 :(得分:0)
本地客户端与所有Photon服务器断开连接的PUN回调方法为OnDisconnectedFromPhoton()
。
如果调用此方法,则 local 客户端需要首先重新连接到Photon服务器,以便能够调用任何其他操作。
本地客户端离开房间时的PUN回调方法为OnLeftRoom()
。如果调用此方法,那么 local 客户端将无法再调用房间内的任何操作,例如SetProperties
,而这正是您试图通过PhotonNetwork.room.SetCustomProperties
进行的操作。
远程客户端离开房间时的PUN回调方法为OnPhotonPlayerDisconnected(PhotonPlayer player)
。
在ReleaseSlot
或OnDisconnectedFromPhoton()
之后,无法执行OnLeftRoom()
中具有的逻辑。另一方面,如果您要在玩家决定明确离开房间之前致电此电话,则不会处理玩家非自愿离开房间的意外断开情况。
因此,当玩家离开房间时,您需要更改释放团队位置的方式(或更新分数?!)。您需要从其余的播放器之一(最好是主客户端)执行此操作。但是,当主客户端离开后房间变空时,将没有人可以呼叫ReleaseSlot
。当然,这是在需要处理这种情况的情况下。
所以OnPhotonPlayerDisconnected
是一个很好的候选人。
如果您错过了它,我的同事Tobias已经发布了a comment on the discussion -identical to this one- that you started on Photon's official forum。