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

C# Unity3D光子在本地播放器断开连接之前调用方法,c#,unity3d,multiplayer,photon,C#,Unity3d,Multiplayer,Photon,我有一个方法,当在其他地方调用或通过ui按钮调用时,它工作得非常好 我遇到了这个问题: 我需要在本地玩家断开连接之前调用此方法。 如果我使用“OnPhotonPlayerDisconnected()”它不能正常工作,因为它是从远程播放器而不是本地调用的 我还测试了“OnLeftRoom()”方法,但它甚至没有调用 我的方法是: public void ReleaseSlot() { Slots[slotIndex] = true; Hashtable SlotManagerHas

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

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


local客户端离开房间时,双关回调方法是
OnLeftRoom()
。如果调用此方法,则本地客户端将无法再调用文件室内的任何操作,如
设置属性
,这正是您试图通过
PhotoNetwork.room.SetCustomProperties
执行的操作


远程客户端离开房间时的双关回调方法是
OnPhotonPlayerDisconnected(PhotonPlayer播放器)

在断开与光子的连接(或
OnLeftRoom()
后,无法执行
释放槽中的逻辑。另一方面,如果您想在玩家决定明确离开房间之前调用此命令,您将不会处理玩家非自愿离开房间时意外断开连接的情况

所以当一名球员离开房间时,你需要改变你释放球队位置(或更新分数?!)的方式。您需要从剩下的一个玩家(最好是主客户端)执行此操作。但是,当主客户端离开后房间变空时,将不会留下任何人呼叫
ReleaseSlot
。当然,这是在这种情况下需要处理的

因此,PhotonPlayerDisconnected上的
是一个很好的候选者


如果你错过了,我的同事Tobias已经发布了。

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


local客户端离开房间时,双关回调方法是
OnLeftRoom()
。如果调用此方法,则本地客户端将无法再调用文件室内的任何操作,如
设置属性
,这正是您试图通过
PhotoNetwork.room.SetCustomProperties
执行的操作


远程客户端离开房间时的双关回调方法是
OnPhotonPlayerDisconnected(PhotonPlayer播放器)

在断开与光子的连接(
OnLeftRoom()
后,无法执行
释放槽中的逻辑。另一方面,如果您想在玩家决定明确离开房间之前调用此命令,您将不会处理玩家非自愿离开房间时意外断开连接的情况

所以当一名球员离开房间时,你需要改变你释放球队位置(或更新分数?!)的方式。您需要从剩下的一个玩家(最好是主客户端)执行此操作。但是,当主客户端离开后房间变空时,将不会留下任何人呼叫
ReleaseSlot
。当然,这是在这种情况下需要处理的

因此,PhotonPlayerDisconnected上的
是一个很好的候选者


如果你错过了,我的同事Tobias已经发布了。

你也尝试过OnDisconnectedFromPhoton吗?我之前尝试过,方法甚至没有调用。你也尝试过OnDisconnectedFromPhoton吗?我之前尝试过,方法甚至没有调用。你需要从离开的玩家那里识别插槽号(
otherPlayer
)在通过Unity的mono消息触发的
OnPhotonPlayerDisconnected(PhotonPlayerOtherPayer)
中,只需将其置于任何游戏对象上的任何MonoBehavior上,就像其他回调一样。因此,这应该添加到每个播放器中。是,但仅当
PhotonNetwork.isMasterClient
true
时,才调用'PhotonNetwork.room.SetCustomProperties'。选择从MasterClient执行此操作只有一个目的:是从单个客户端而不是所有客户端执行此操作。您需要从通过Unity的mono消息触发的
OnPhotonPlayerDisconnected(PhotonPlayer otherPayer)
中离开的玩家(
otherPlayer
)中识别插槽号,所以只要把它放在任何游戏对象上的任何单一行为上,就像其他回调一样。因此,这应该添加到每个播放器中。是,但仅当
PhotonNetwork.isMasterClient
true
时,才调用'PhotonNetwork.room.SetCustomProperties'。选择从MasterClient执行此操作只有一个目的:从单个客户端而不是所有客户端执行此操作。