使用Photon引擎进行Unity网络模块的开发(一)

1.Photon引擎

Photon Unity Network(PUN)

Photon Server技术

2.Photon引擎简介

Photon引擎隶属于Exit Games公司,是世界著名独立网络引擎和多人通信平台,适用于独立开发者和专业工作室

Photon引擎具有通信快速、高可靠性、使用方便、容易扩展等优点

Photon引擎包括Photon服务器,以及面向多种游戏开发工具的客户端SDK

3.Photon服务器

Photon服务器是一款工业级别的服务器,核心使用C++语言实现

允许开发者使用C#语言,自定义Photon服务器逻辑

支持多种模式的网络游戏,如MOBA、MMO

4.Photon服务器的部署选择

Photon Server(本地)

Photon Cloud(云端)

5.Photon客户端

Photon引擎针对各个平台,提供了对应的客户端SDK

游戏引擎:Unity(Unity 3D SDK、Photon Unity Networking)、Unreal、Cocos2d-x

客户端平台:Windows、Linux、Android

Photon Unity Networking(PUN):针对Unity平台开发的一款网络插件,用于开发Unity客户端程序

6.PUN以及PhotonServer的下载和配置

向Unity项目中导入PUN插件,在Asset Store中下载导入(只有Unity2018.4.22或更高版本才能在Asset Store中下载)

导入PUN之后,会出现下图这样的窗口,让你输入AppId或者Email,这里我们先关闭该窗口,后面再进行配置

导入完成后,Project视图中Assets文件夹下会多出下图文件

去Photon引擎官网注册账号(官网:https://www.photonengine.com/zh-cn),注册完成后,在Dashboard下点击CREATE A NEW APP

其它内容不用改变,Application Name可随便写,Description和URL可写可不写,然后点击Create按钮,进行创建即可

创建完成后,复制AppID,回到Unity的AppId中

下载Photon Server:PhotonEngine SDKs | Photon Engine,不挂梯子的话很难下载,可以多试几次

Photon Server下载完成后,执行它的安装程序,完成Photon Server的安装(可自行百度),在Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy\bin_Win64目录下双击PhotonControl.exe,电脑右下角的任务栏中,右击,选择LoadBalancing(MyCloud)->Start as application,如果没有启动成功,可以查阅:https://blog.csdn.net/qq_28936845/article/details/57412661

查看是否启动成功,可以点击Open Logs查看日志,下图是已经成功启动的

复制Current IP到Unity的Server Address

Hosting(服务器托管方式):Not Set(未设置)、Photon Cloud(Photon云端)、Self Hosted(自己搭建的服务器)、Offline Mode(离线模式)、Best Region(最佳云端区域)

Server Address:Photon服务器地址

Server Port:Photon服务器端口号

Protocol:传输层协议选择(TCP、UDP)

AppId:Photon账号的应用Id

Auto-Join Lobby:是否自动加入大厅

7.PUN的C/S架构之基本连接流程

将下面脚本挂载到场景物体后,回到unity并运行查看控制台打印的信息

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon;

public class PhotonConnection : PunBehaviour
{
    // 记录网络连接状态
    private string temp;

    private void Start()
    {
        // 初始时,打印网络连接状态
        temp = PhotonNetwork.connectionStateDetailed.ToString();
        Debug.Log(temp);

        // 连接Photon服务器
        PhotonNetwork.ConnectUsingSettings("1.0");
    }

    private void Update()
    {
        // 连接状态发生改变是;打印log日志
        if (temp != PhotonNetwork.connectionStateDetailed.ToString())
        {
            temp = PhotonNetwork.connectionStateDetailed.ToString();
            Debug.Log(temp);
        }
    }
    //覆写PUN回调函数,当Unity客户端连接到MasterServer时调用,进入默认游戏大厅
    public override void OnConnectedToMaster()
    {
        PhotonNetwork.JoinLobby();
    }
    //覆写PUN回调函数,当Unity客户端加入大厅时调用,在大厅中创建房间并进入该房间
    public override void OnJoinedLobby()
    {
        PhotonNetwork.CreateRoom("");
    }
}

上面网络连接状态的含义:

PeerCreated:Unity客户端未连接Photon服务器

ConnectingToMasterserver:Unity客户端从NameServer获得本网络游戏的MasterServer地址,开始连接MasterServer

Authenticating:Photon服务器正在认证Unity客户端的请求

Authenticated:Unity客户端已连接MasterServer,此时会执行回调函数OnConnectedToMaster()

JoinedLobby:Unity进入游戏大厅,执行回调函数OnJoinedLobby()

ConnectingToGameserver:Unity客户端开始连接管理该游戏房间的GameServer

ConnectedToGameserver:Unity客户端成功连接GameServer

Joining:客户端正在创建或者加入游戏房间

Joined:客户端已经加入游戏房间

注:如果Unity客户端在上述任意阶段断开与Photon服务器的连接,会回到PeerCreated状态

8.PUN常用类的说明

(1)IPunCallback:PUN在这个接口中,定义了许多与Photon网络连接相关的回调函数。网络连接状态发生变化时,游戏客户端会调用这些回调函数

(2)PunBehaviour:

(3)PhotonNetwork:是PUN中的静态类,包含了用于向Photon服务器发送请求的函数,以及保存了玩家信息的属性

PhotonNetwork.ConnectUsingSettings():连接Photon服务器

PhotonNetwork.JoinLobby():在MasterServer加入游戏大厅

PhotonNetwork.CreateRoon():在游戏大厅中创建游戏房间

PhotonNetwork.LeaveRoom():从游戏房间返回游戏大厅

PhotonNetwork.Instantiate():创建客户端控制的游戏对象

PhotonNetwork.room():客户端进入的游戏房间

PhotonNetwork.player():客户端玩家信息

(4)PhotonPlayer:表示Photon网络通信中的玩家

PhotonPlayer.ID:玩家的ID,由Photon服务器分配

PhotonPlayer.name:玩家的昵称,玩家可以自己设定昵称

PhotonPlayer.isLocal:该玩家是否为本地客户端的玩家

PhotonPlayer.customProperties:玩家的自定义属性

(5)PhotonView:管理游戏房间内客户端之间的通信

(6)RoomInfo:游戏房间的属性

(7)ServerSettings:服务器设置

(8)TypedLobbyInfo:游戏大厅的属性信息

(9)……………..

结语:合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冷的晚风

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值