Photon:4-GameManager&Level

tips:根据当前在房间里玩的玩家数量处理各种关卡加载的功能

一、加载竞技场常规

1.打开‘GameManager’脚本

2.加入新的regin,并加入新的函数

    #region Private MEthods
    void LoadArena()
    {
        if(!PhotonNetwork.IsMasterClient)
        {
            Debug.LogError("photonnetwork:trying to load a level but we are not the master Client!");

        }
        Debug.LogFormat("photonnetwork: loading level:{0}", PhotonNetwork.CurrentRoom.PlayerCount);
        PhotonNetwork.LoadLevel("Room for" + PhotonNetwork.CurrentRoom.PlayerCount);
    }
    #endregion

3.保存脚本

解释:当我们调用此方法的时候,将根据我们所在房间的PlayerCount属性加载适当的房间

①LoadLevel方法只能是MasterClient调用

②PhotonNetwork.LoadLevel("Room for" + PhotonNetwork.CurrentRoom.PlayerCount);我们使用Photon加载想要的房间场景而不是unity,是因为我们想依靠它在房间里所有连接的客户端上加载此关卡,因为我们已经为本游戏启动了PhotonNetwork。AutomaticallySyncScene

二、监听玩家连接

GameManager脚本需要监听玩家的连接和断开

1.打开该脚本

2.添加如下内容

    public override void OnPlayerEnteredRoom(Player newPlayer)
    {
        Debug.LogFormat("OnPlayerEnteredRoom(){0}", newPlayer.NickName);//新加入房间的人名
        if(PhotonNetwork.IsMasterClient)
        {
            Debug.LogFormat("OnPlayerEnteredRoom IsMasterClient {0}", PhotonNetwork.IsMasterClient);
            LoadArena();
        }
    }

    public override void OnPlayerLeftRoom(Player otherPlayer)
    {
        Debug.LogFormat("OnPlayerLeftRoom(){0}", otherPlayer.NickName);
        if (PhotonNetwork.IsMasterClient)
        {
            Debug.LogFormat("OnPlayerLeftRoom IsMasterClient {0}", PhotonNetwork.IsMasterClient);
            LoadArena();
        }
    }

3.保存脚本

解释:现在,每次一个玩家加入或者离开房间,我们都可以看到信息,并且只有放我们是MAsterClient的时候调用LoadArena方法

三、在初始界面加载竞技场

1.进入Launcher脚本

2.加入下面的脚本内容

    public override void OnJoinedRoom()
    {
        Debug.Log("now this client is in a room");
        Debug.Log(PhotonNetwork.NickName);
        if(PhotonNetwork.CurrentRoom.PlayerCount==1)
        {
            Debug.Log("We Load the Room for 1");

            //Load room level
            PhotonNetwork.LoadLevel("Room for 1");
        }

    }

现在可以在初始界面试一下,点击Play之后,就可以跳转到Room for 1

在Room for 1中点击Leave 又可以回到初始场景,但是我们会发现,回去之后,立马又回来了,下面让我们解决这个bug

出现这个问题是因为,该方法被自动调用,于是直接进入join RandomRoom(),就又回到了Room for 1

 所以,解决这个问题我们需要让脚本在用户点击了“Play”按钮之后,再调用该函数,所以可以设置一个变量作为标志

1.打开Launcher脚本

2.创建一个新的标志变量,并修改Connect函数

    public void Connect()
    {

        if(PhotonNetwork.IsConnected)
        {
            PhotonNetwork.JoinRandomRoom();
        }
        else
        {
            //keep track of the will to join a room,because when we come back from the game we will get a callback that we are connected,so we need to know what to do then
            isConnecting = PhotonNetwork.ConnectUsingSettings();
        }
        progressLabel.SetActive(true);
        controlPanel.SetActive(false);
    }

3.将该bool变量在OnConnectedToMaster和OnDisConnected中设置为False

至此,可以发布桌面版本和unity一起运行,这样可以获得两名玩家接入同一个房间,如果是unity首先创建房间,可以在控制台看到,首先是进入room for 1,然后进入Room for 2

猜你喜欢

转载自blog.csdn.net/karonneveralone/article/details/124558177
今日推荐