C# 当玩家进入房间时执行操作
我想用Photon(Pun2)创建一个多人游戏应用程序。当一个玩家加入房间后,我想隐藏一些按钮,并为该房间中的所有玩家显示其他按钮。目前我有这个功能: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
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
}
}