嗨,伙计们,我正在使用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内部的条件之外,但都不起作用。
如果有人能帮忙,那就太好了。顺便说一下,这个数独游戏是购买的,我正试图将其转换为多人游戏
由于master通常是房间里的第一个,所以也是第一个调用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
确保稍后加入的客户端也将接收到呼叫- 如果不首先接收随机值,就不可能开始游戏