Unity3D Photon在本地播放器断开连接之前调用一个方法

Unity3D Photon Call A Method Before Local Player Disconnected

我有一个方法在调用其他地方或通过 ui 按钮调用时效果很好。

我遇到了这个问题: 我需要在 本地播放器断开连接之前调用此方法。

如果我使用 "OnPhotonPlayerDisconnected()" 它不能正常工作,因为它是从远程播放器调用的,而不是本地的。

我也测试了 "OnLeftRoom()" 方法,但它甚至没有调用。

我的方法在这里:

public void ReleaseSlot()
{
    Slots[slotIndex] = true;
    Hashtable SlotManagerHashtable = new Hashtable();
    SlotManagerHashtable.Add("teamslot" + slotIndex.ToString(), false);
    PhotonNetwork.room.SetCustomProperties(SlotManagerHashtable, null, false);
    alreadyJoined = false;
}

本地客户端与所有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