问题描述
大家好,我正在使用 Unity 中的 Photon 将单人 Sudoko 游戏转换为多人游戏(现在有 2 个玩家)。
数独游戏的基本逻辑是已经加载了300个拼图数据。 1 到 300 之间的随机数被拾取并加载相应的拼图。
但我面临的问题是,即使我已经确保为客户端和主服务器获取了相同的数字,但正在加载不同的谜题。
所以基本上我的脚本称为 MultiManager,附加到数独屏幕中的 MultiManager 游戏对象。脚本看起来像这样。
void Start()
{
PV = GetComponent<PhotonView>();
if (PhotonNetwork.IsMasterClient)
{
puzzleIndex = Random.Range(0,300);
PV.RPC("RPC_PuzzleIndex",RpcTarget.Others,puzzleIndex);
}
gameManager = FindobjectOfType(typeof(GameManager)) as GameManager;
gameManager.PlayNewGame("easy");
}
[PunRPC]
void RPC_PuzzleIndex(int puzzleIndexnumber)
{
puzzleIndex = puzzleIndexnumber;
}
所以在 GameManager 脚本中你有这些功能:
public void PlayNewGame(string groupId)
{
// Get the PuzzleGroupData for the given groupId
for (int i = 0; i < puzzleGroups.Count; i++)
{
PuzzleGroupData puzzleGroupData = puzzleGroups[i];
if (groupId == puzzleGroupData.groupId)
{
PlayNewGame(puzzleGroupData);
return;
}
}
}
private void PlayNewGame(PuzzleGroupData puzzleGroupData)
{
// Get a puzzle that has not yet been played by the user
PuzzleData puzzleData = puzzleGroupData.GetPuzzle();
// Play the game using the new puzzle data
PlayGame(puzzleData);
}
在 PuzzleGroupData 类中你有这个函数:
public PuzzleData GetPuzzle()
{
return new PuzzleData(puzzleFiles[MultiManager.puzzleIndex],shiftAmount,groupId);
}
我不太明白发生了什么问题。我尝试使用其他变体,例如将随机数保留在 PhotonNetwork.isMasterClient 等条件之外,但不起作用。
如果有人能帮忙就太好了。顺便说一下,这个数独游戏是购买的,我正在尝试将其转换为 mutliPlayer 游戏
解决方法
由于主服务器通常是房间中的第一个,因此也是第一个被调用的 Start
我认为发生的情况是当调用 RPC
时,您的其他客户端还没有连接。
此外,还可能(实际上很有可能)在收到 RPC 之前调用了 Start
。
我宁愿等到你拥有价值再做
void Start()
{
PV = GetComponent<PhotonView>();
if (PhotonNetwork.IsMasterClient)
{
PV.RPC(name of(RPC_PuzzleIndex),RpcTarget.AllBuffered,Random.Range(0,300));
}
}
[PunRPC]
void RPC_PuzzleIndex(int puzzleIndexNUmber)
{
puzzleIndex = puzzleIndexNUmber;
gameManager = FindObjectOfType(typeof(GameManager)) as GameManager;
gameManager.PlayNewGame("easy");
}
这边
-
RpcTarget.AllBuffered
确保稍后加入的客户也能接到电话 - 如果不先收到随机值,就无法开始游戏