如何更改 Photon 中特定播放器的设置?
Posted
技术标签:
【中文标题】如何更改 Photon 中特定播放器的设置?【英文标题】:How to change settings for a specific player in Photon? 【发布时间】:2021-08-18 07:03:07 【问题描述】:我正在制作一个简单的 Word Builder 类型的游戏(其中一个玩家输入一个单词,另一个玩家输入一个以第一个玩家单词的最后一个字母开头的单词),我正在努力做到这一点MasterClient 通过输入第一个单词开始游戏,然后他的 InputField 被禁用,第二个玩家的 InputField 被启用,他输入一个单词,反之亦然。
我尝试了多种方法,所有这些方法都来自我对 Unity 和 C# 的基本知识。例如,我认为肯定会起作用,但没有。
public void ChangeTurn ()
if (photonView.IsMine)
inputField.enabled = false;
else
inputField.enabled = true;
简而言之,有没有办法做类似PhotonNetwork.PlayerList[0].inputField.enabled = false;
的事情?请告诉我是否有办法解决这个问题?我将永远感激不尽。
【问题讨论】:
这可能会给你一些方向,link 【参考方案1】:您可以存储当前活动的Player.ActorNumber
,并在主服务器上使用Player.GetNextFor
获取玩家的下一个玩家,按 ActorNumber (Player.ID) 排序。环绕。
当你把东西传给下一个玩家时很有用。例如:将回合传给下一位玩家。
比如
private int currentID;
...
currentID = Player.GetNextFor(currentID).ActorNumber;
...
然后将其传输给每个人,例如通过RPC
...
photonView.RPC(nameof(ChangeTurn), RpcTarget.All, currentID);
...
// This will be executed on all clients
[PunRPC]
private void ChangeTurn(int newID)
// Simply check if the given newID matches your own ActorNumber
inputField.enabled = PhotonNetwork.LocalPlayer.ActorNumber == newID;
所以大家在一起,例如像
// Store the ID of the currently active player
private int currentID;
// This is what a client has to call when he is done with his turn
private void EndTurn()
// Tell only the masterClient that we are done
// and he shall change the turn to the next player
photonView.RPC(nameof(ChangeTurnOnMaster), RpcTarget.MasterClient);
// This will be executed on the MasterClient
[PunRPC]
private void ChangeTurnOnMaster()
// Just to be really sure this is only done on the master client
if(!PhotoNetwork.isMasterClient) return;
// Get the next actor number
// This wraps around so after reaching the last player it will again start with the first one
currentID = Player.GetNextFor(currentID).ActorNumber;
// Tell everyone the new active player ID
photonView.RPC(nameof(ChangeTurn), RpcTarget.All, currentID);
// This will be executed on all clients
[PunRPC]
private void ChangeTurn(int newID)
// Just in case let everyone store the active ID
// this way you can also handle other things based on the ID later
// And also deal with the case that the masterClient switches for some reason
currentID = newID;
// Simply check if the given newID matches your own ActorNumber
inputField.enabled = PhotonNetwork.LocalPlayer.ActorNumber == newID;
【讨论】:
我已经尝试了几个小时,但我似乎无法让它工作,您能否在另一个答案中详细说明? @JamalH.A 添加了一些 cmets 和更完整的示例代码 .. 希望现在更清楚 ;) 做到了!太感谢了!最近几天回复我的帖子,你真的教会了我很多东西。另外,imgur.com/a/cPJcG6O以上是关于如何更改 Photon 中特定播放器的设置?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Youtube API 访问特定播放列表中的所有视频?