C# 当玩家进入房间时执行操作

C# 当玩家进入房间时执行操作,c#,unity3d,multiplayer,photon,C#,Unity3d,Multiplayer,Photon,我想用Photon(Pun2)创建一个多人游戏应用程序。当一个玩家加入房间后,我想隐藏一些按钮,并为该房间中的所有玩家显示其他按钮。目前我有这个功能: public override void OnPlayerEnteredRoom(Player newPlayer) { print(newPlayer); // #02 if (PhotonNetwork.CurrentRoom.PlayerCount == 2 && PhotonN

我想用Photon(Pun2)创建一个多人游戏应用程序。当一个玩家加入房间后,我想隐藏一些按钮,并为该房间中的所有玩家显示其他按钮。目前我有这个功能:

public override void OnPlayerEnteredRoom(Player newPlayer)
     {
         print(newPlayer); // #02
         if (PhotonNetwork.CurrentRoom.PlayerCount == 2 && PhotonNetwork.IsMasterClient)
         {
             print(PhotonNetwork.CurrentRoom.PlayerCount + "/2 Starting game...");
 
             searchingBtn.SetActive(false); // hide this button
             findMatchBtn.SetActive(false); // hide this button
             scanningBtn.SetActive(true); // display this button
         }
     }
但这不起作用,因为只有两个玩家中的一个会改变按钮,而另一个玩家的按钮会保持不变

我在互联网上看到了一些例子,在这个函数中,
OnPlayerEnteredRoom
它被称为
PhotonNetwork.LoadLevel(scene\u index)
,但此时,我不想加载另一个场景,我想停留在当前场景中,只隐藏/显示一些按钮。这可能吗

编辑:这是最终版本

public override void OnJoinedRoom()
{
    Debug.Log("You joined the room.");
    Debug.Log(PhotonNetwork.CurrentRoom.PlayerCount);
    Debug.Log(PhotonNetwork.IsMasterClient);

    UpdateButtons();
}

public override void OnPlayerEnteredRoom(Player newPlayer)
{
    Debug.Log("Other players joined the room.");
    if (PhotonNetwork.CurrentRoom.PlayerCount > 1 && PhotonNetwork.IsMasterClient)
    {
        Debug.Log(PhotonNetwork.CurrentRoom.PlayerCount + "/2 Starting game...");

        UpdateButtons();
    }
}

private void UpdateButtons()
{
    searchingBtn.SetActive(false); // hide this button
    findMatchBtn.SetActive(false); // hide this button
    scanningBtn.SetActive(true); // display this button
}

从光子文档:

virtual void OnJoinedRoom ()
    //Called when the LoadBalancingClient entered a room, no matter if this client 
    //created it or simply joined.
有了这些知识,
onplayerenteredrom
只有在远程玩家加入房间时才会被调用。因此,为了解决您的问题,您需要在本地客户端的
OnJoinedRoom
回调中调用代码,并在远程播放器加入时调用
OnPlayerEnteredRoom

总之,您的新代码应该如下所示:

public override void OnPlayerEnteredRoom(Player newPlayer)
{
     UpdateButtons(newPlayer);
}

public override void OnJoinedRoom(Player player)
{
    UpdateButtons(player);
}

private void UpdateButtons(Player player)
{
    if (PhotonNetwork.CurrentRoom.PlayerCount > 1 && PhotonNetwork.IsMasterClient)
    {             
        print(PhotonNetwork.CurrentRoom.PlayerCount + "/2 Starting game...");
 
        searchingBtn.SetActive(false); // hide this button
        findMatchBtn.SetActive(false); // hide this button
        scanningBtn.SetActive(true); // display this button
    }
}

这回答了你的问题吗?嗨,谢谢你的回答!但是joinedroom的覆盖函数
OnJoinedRoom
没有收到任何参数,所以这不起作用。但是我理解你的观点,我用最终版本编辑了我的文章。非常感谢@Tenzolinho哦,我错了。只需使用
PhotonNetwork.LocalPlayer
即可获得您自己的参考资料。如果这就是你要找的。
public override void OnPlayerEnteredRoom(Player newPlayer)
{
     UpdateButtons(newPlayer);
}

public override void OnJoinedRoom(Player player)
{
    UpdateButtons(player);
}

private void UpdateButtons(Player player)
{
    if (PhotonNetwork.CurrentRoom.PlayerCount > 1 && PhotonNetwork.IsMasterClient)
    {             
        print(PhotonNetwork.CurrentRoom.PlayerCount + "/2 Starting game...");
 
        searchingBtn.SetActive(false); // hide this button
        findMatchBtn.SetActive(false); // hide this button
        scanningBtn.SetActive(true); // display this button
    }
}