PUN☀️一、基础配置、搭建大厅程序

简介: PUN☀️一、基础配置、搭建大厅程序

🟥 前言

PUN作用: 搭建多人 在线 / 局域网 网络游戏

使用的版本: Unity2017.4.7+、PUN 2 - FREE

Appid配置网址: PUN

中国区官网: 中国区官网

教程参考地址: 地址

20190826补

Photon逻辑顺序

连接到服务器——加入某房间——主客户端加载场景。类似LOL自定义模式

:PUN会根据统一的版本号、Appid,加入主客户端的房间,使所有客户端加载同一个场景


🟧 Appid配置

作用:PUN会根据Appid和版本号,确认你们属于同一个应用。

配置网址传送门

导入SDK后出现提示框:



🚩如果你以前在PUN网页上配置过:

你可以直接输入你申请的Appid,点Setup Project;或Skip跳过,选择Project里的PhotonServerSettings,将配置好的Appid填入该位置。


🚩若你是第一次使用:

则填入你的邮箱,点Setup Project,会出现注册、进入他们网站之类的。

完成注册后,创建Pthton PUN的应用,根据a做即可。

查看Photon全部日志信息

日志信息改为Full,可查看Photon全部日志信息。


🟨 连接地区设置

PUN默认连接海外云服务器。想用中国区服务器,就要进行如下配置:

1️⃣ 获得中国区Appid

🚩进入中国区官网:中国区官网

🚩点击试用购买——申请免费中国区光子云——把创建好的Appid复制进去,提交

注意:该Appid未填入申请中国区时,仍是海外区Appid。当申请后就变成中国区的了。所以Appid可多创建几个,一个用于中国区,一个海外。


2️⃣ 程序设置

使用中国区Appid需要进行以下程序设置:

🚩LoadBalancingClient 脚本:

public string NameServerHost = “ns.exitgames.com”;

改为:

public string NameServerHost = “ns.photonengine.cn”;

🚩Unity 的 PhotonServerSettings——Fixed Region填入 CN

20210320测试:

现在不许输入 CN ,输入反而连接不上

**注意:**若用海外的服务器,则LoadBalancingClient脚本不用改,不用填CN,Appid用海外的即可。


🟩 搭建大厅

实现连接到服务器。

1️⃣ 场景及连接脚本

1、创建新场景

2、新建空物体,将如下代码挂上去

using UnityEngine;
using Photon.Pun;
 
public class Launcher : MonoBehaviour
{
    //此客户端的版本号。用户之间通过gameVersion(允许你做出破坏性的改变)进行隔离。
    string gameVersion = "1";
 
    void Awake()
    {
        // 这确保我们可以在主客户端和同一房间的所有客户端上使用photonnet . loadlevel()自动同步它们的级别
        PhotonNetwork.AutomaticallySyncScene = true;
    }
 
    void Start()
    {
        ConnectServer();
    }
 
    //连接到服务器
    public void ConnectServer()
    {
        // 检查是否连接了服务器
        if (!PhotonNetwork.IsConnected)
        {
            //首先连接到光子在线服务器。
            PhotonNetwork.GameVersion = gameVersion;
            PhotonNetwork.ConnectUsingSettings();
        }
    }
}


2️⃣ 查看初步结果

1、因为我们现在刚申请了中国区服务器,客服会在1-2工作日完成配置,现在还没配置好,所以我们现在如果使用中国区服务器Unity会报错。

所以我们暂且使用海外服务器,不用填CN,LoadBalancingClient脚本不用改,Appid用海外的即可。

2、运行,即可看到成功输出信息了


3️⃣ 利用加入服务器成功的回调,实现加入服务器房间

PUN连接顺序:

连接服务器–加入房间

此时的代码,只实现了加入服务器,没写加入到服务器房间的逻辑。

我们也不能将加入房间的代码直接放在进行连接之后,因为连接服务器也需要时间,直接加入房间不可能成功。

所以我们要用回调加入房间。以下提供的两种方法,建议方法2。

🚩 方法1:IConnectionCallbacks

a、 继承IConnectionCallbacks并实现接口(里面有连接回调接口)

b、 OnConnected连接回调接口改为:

public void OnConnected()
        {
            PhotonNetwork.JoinRandomRoom();
        }


🚩方法2:MonoBehaviourPunCallbacks(推荐)

改为继承MonoBehaviourPunCallbacks。可增加如下回调:

#region Pun Callbacks
 
    // 连接服务器成功回调
    public override void OnConnectedToMaster()
    {
        PhotonNetwork.JoinRandomRoom();
    }
 
    //连接服务器回调
    public override void OnDisconnected(DisconnectCause cause)
    {
        Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);
    }
 
    // 加入房间成功回调
    public override void OnJoinedRoom()
    {
        Debug.Log("OnJoinedRoom");
    }
 
    //加入房间失败回调
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");
 
        PhotonNetwork.CreateRoom(null, new RoomOptions());
    }
 
    #endregion

现在我们测试,发现已经加入房间成功了



4️⃣ 设置房间连接人数

设置一个房间的连接人数

[Tooltip("最大连接人数")]
    public byte maxPlayersPerRoom = 4;
 
    //加入房间失败回调
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");
 
        PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers=maxPlayersPerRoom});
    }

最终代码

using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
 
public class Launcher : MonoBehaviourPunCallbacks
{
    #region  Parameters
 
    //此客户端的版本号。用户之间通过gameVersion(允许你做出破坏性的改变)进行隔离。
    string gameVersion = "1";
 
    [SerializeField]
    [Tooltip("最大连接人数")]
    byte maxPlayersPerRoom = 4;
 
    bool isPressPlay = false;
 
    #endregion
 
 
    #region Mono CallBacks
 
    void Awake()
    {
        // 这确保我们可以在主客户端和同一房间的所有客户端上使用photonnet . loadlevel()自动同步它们的级别
        PhotonNetwork.AutomaticallySyncScene = true;
    }
 
    void Start()
    {
        ConnectServer();
    }
 
    #endregion
 
 
    #region Public Method
 
    //绑定到开始连接上:连接到服务器房间
    public void Skode_JoinRoom()
    {
        isPressPlay = true;
 
        //若还未连接服务器,则先连接服务器,再加入房间
        if (!PhotonNetwork.IsConnected)
            ConnectServer();
        else
            LoadRoom();
    }
 
    #endregion
 
 
    #region Private Methods
 
    //连接到服务器
    void ConnectServer()
    {
        // 检查是否连接了服务器
        if (!PhotonNetwork.IsConnected)
        {
            //首先连接到光子在线服务器。
            PhotonNetwork.GameVersion = gameVersion;
            PhotonNetwork.ConnectUsingSettings();
        }
    }
 
    void LoadRoom()
    {
        PhotonNetwork.JoinRandomRoom();
    }
 
    void LoadScene()
    {
        PhotonNetwork.LoadLevel("Room for " + PhotonNetwork.CurrentRoom.PlayerCount);
    }
 
    #endregion
 
 
    #region Pun Callbacks
 
    // 连接服务器成功回调
    public override void OnConnectedToMaster()
    {
        if (isPressPlay)
            LoadRoom();
    }
 
    //连接服务器失败回调
    public override void OnDisconnected(DisconnectCause cause)
    {
        Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);
    }
 
    // 加入房间成功回调
    public override void OnJoinedRoom()
    {
        //主客户端加载场景即可。其他客户端进入房间后,会自动加载主客户端的场景
        if (PhotonNetwork.IsMasterClient)
            LoadScene();
    }
 
    //加入房间失败回调
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");
 
        //创建房间后,会自动加入房间。从而触发加入房间成功的回调。
        PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });
    }
 
    #endregion
}


相关文章
|
4月前
|
图形学
PUN☀️三、服务器大厅、服务器房间
PUN☀️三、服务器大厅、服务器房间
|
6月前
|
监控 安全
好用的屏幕监控软件推荐,快来试试
【推荐】高效屏幕监控软件:WorkWin专注员工监控,时间统计及远程控制,确保生产力与安全;ScreenFlow适合高质录像及视频编辑,满足教学、演示需求;Movavi Screen Recorder,用户友好,定时录制功能方便实用。提升工作效能,保护信息安全,多样选择,满足不同场景。
117 5
|
6月前
|
开发工具 图形学 Android开发
【推荐100个unity插件之6】利用Photon PUN2框架最快最简单实现多人在线游戏
【推荐100个unity插件之6】利用Photon PUN2框架最快最简单实现多人在线游戏
145 0
|
7月前
微信小游戏制作工具中的分享功能怎么用?
微信小游戏制作工具中的分享功能怎么用?
91 0
|
7月前
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
253 0
|
小程序 Android开发 数据安全/隐私保护
【 uniapp - 黑马优购 | 发布】详讲如何发布一个小程序
【 uniapp - 黑马优购 | 发布】详讲如何发布一个小程序
136 0
|
机器学习/深度学习 JSON 小程序
☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》
☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》
205 0
☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》
|
域名解析 前端开发 程序员
一键托管程序员的做菜神器,隔离食用手册--5
一键托管程序员的做菜神器,隔离食用手册--5
151 0
下一篇
DataWorks