我正在尝试制作多人纸牌游戏。我正面临某种比赛条件。当用户单击卡时,它说要掌握该卡已被播放。然后主人决定移动是准确的,然后回头向客户打出一张纸牌,将其扔到桌子上。并且如果桌上有4张牌,则决定获胜者并销毁所玩的牌。 这是我的播放器对象:
public class Player : MonoBehaviour, IOnEventCallback
{
List<int> cardsOnTheTable;
public void OnEvent(EventData photonEvent)
{
byte eventCode = photonEvent.Code;
if (eventCode == 0)
{
if (photonView.IsMine)
{
object[] data = (object[])photonEvent.CustomData;
if (CheckTheMoveIsOK())
{
byte evCode = 1;
object[] content = new object[] { (int)data[0], (int)data[1] };
RaiseEventOptions raiseEventOptions = new RaiseEventOptions { Receivers = ReceiverGroup.All };
SendOptions sendOptions = new SendOptions { Reliability = true };
PhotonNetwork.RaiseEvent(evCode, content, raiseEventOptions, sendOptions);
}
}
}
else if (eventCode == 1)
{
if (photonView.IsMine)
{
object[] data = (object[])photonEvent.CustomData;
Card.Throw(fromPos, toPos);
if (PhotonNetwork.IsMasterClient)
{
cardsOnTheTable.Add((int)data[1]);
if (cardsOnTheTable.Count == 4)
{
RemoveCards();//With PhotonNetwork.Destroy
}
}
}
}
}
}
“卡片”是从母版创建的场景对象。
public class Card : MonoBehaviour
{
int CardId;
void OnMouseDown()
{
if (!photonView.IsMine)
{
return;
}
byte evCode = 0;
object[] content = new object[] { PhotonNetwork.LocalPlayer.ActorNumber, CardId };
RaiseEventOptions raiseEventOptions = new RaiseEventOptions { Receivers = ReceiverGroup.MasterClient };
SendOptions sendOptions = new SendOptions { Reliability = true };
PhotonNetwork.RaiseEvent(evCode, content, raiseEventOptions, sendOptions);
}
public void Throw(Vector3 fromPos, Vector3 toPos)
{
//Move card
}
}
问题是,有时候,对于某些客户端,“投掷”功能会引发错误,因为在主客户端中,相应的卡已被销毁。我认为我需要等待所有客户端“扔”他们的卡,然后将它们从网络中删除。我该怎么办?