Unity3D光子在本地播放器断开连接之前调用方法

时间:2019-06-25 12:08:05

标签: c# unity3d multiplayer photon

我有一种方法,在其他地方调用或通过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;
}

1 个答案:

答案 0 :(得分:0)

本地客户端与所有Photon服务器断开连接的PUN回调方法为OnDisconnectedFromPhoton()。 如果调用此方法,则 local 客户端需要首先重新连接到Photon服务器,以便能够调用任何其他操作。

本地客户端离开房间时的PUN回调方法为OnLeftRoom()。如果调用此方法,那么 local 客户端将无法再调用房间内的任何操作,例如SetProperties,而这正是您试图通过PhotonNetwork.room.SetCustomProperties进行的操作。

远程客户端离开房间时的PUN回调方法为OnPhotonPlayerDisconnected(PhotonPlayer player)

ReleaseSlotOnDisconnectedFromPhoton()之后,无法执行OnLeftRoom()中具有的逻辑。另一方面,如果您要在玩家决定明确离开房间之前致电此电话,则不会处理玩家非自愿离开房间的意外断开情况。

因此,当玩家离开房间时,您需要更改释放团队位置的方式(或更新分数?!)。您需要从其余的播放器之一(最好是主客户端)执行此操作。但是,当主客户端离开后房间变空时,将没有人可以呼叫ReleaseSlot。当然,这是在需要处理这种情况的情况下。

所以OnPhotonPlayerDisconnected是一个很好的候选人。

如果您错过了它,我的同事Tobias已经发布了a comment on the discussion -identical to this one- that you started on Photon's official forum