在带有Photon的Unity中,等待客户等待对象,然后再将其从主对象销毁吗?

时间:2019-01-02 08:45:56

标签: c# unity3d photon

我正在尝试制作多人纸牌游戏。我正面临某种比赛条件。当用户单击卡时,它说要掌握该卡已被播放。然后主人决定移动是准确的,然后回头向客户打出一张纸牌,将其扔到桌子上。并且如果桌上有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
    }
}

问题是,有时候,对于某些客户端,“投掷”功能会引发错误,因为在主客户端中,相应的卡已被销毁。我认为我需要等待所有客户端“扔”他们的卡,然后将它们从网络中删除。我该怎么办?

0 个答案:

没有答案