玩家进入房间时执行操作

问题描述

我想使用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
         }
     }

但是这是行不通的,因为只有2个播放器中的1个按钮会更改,而其他两个按钮则保持不变。

我在Internet上看到了一些示例,其中此功能OnPlayerEnteredRoom称为PhotonNetwork.LoadLevel(scene_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
}

解决方法

来自Photon文档:

virtual void OnJoinedRoom ()
    //Called when the LoadBalancingClient entered a room,no matter if this client 
    //created it or simply joined.
virtual void OnPlayerEnteredRoom (Player newPlayer)
    //Called when a remote player entered the room. This Player is already added to 
    //the playerlist.

基于此知识,OnPlayerEnteredRoom仅在远程播放器加入会议室时被调用。因此,为了解决您的问题,您需要在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
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...