简介

Photon 是一个泛用性的 ScoketServer 套装软件,可用于多人在线游戏、聊天室、大厅游戏,并同时支持 Windows、Unity3D、iOS、Android、Flash 等平台。Photon 包含两个部分,一部分是 Socket 服务器,另一部分是其针对各个平台编写的 SDK,Unity3D 平台对应的 SDK 为 Photon Unity Networking(PUN)

需要用的资源

Photon 网址:
https://www.photonengine.com/zh-CN/Photon
PHOTON光子引擎光子云中国区域免费申请表单
https://vibrantlink.com/chinacloudapply/
PUN2资源
https://assetstore.unity.com/packages/tools/network/pun-2-free-119922
使用文档
https://doc.photonengine.com/zh-cn/pun/current/getting-started/pun-intro

创建 PUN 云服务器

在 https://dashboard.photonengine.com/zh-CN 网站注册账号,再创建一个云服务器,如下:


说明:免费版 PUN 云服务器最多支持 20 个玩家同时在线;

下载 PUN2

去unity资源商城下载PUN2资源包
PUN2资源
https://assetstore.unity.com/packages/tools/network/pun-2-free-119922

把资源分别导入到项目

为了演示这里我用unity自带的学习模板创建项目

导入PUN2

配置

PUN 资源导入时,会弹出弹框,设置我们的pun(ps:如果没有弹出可能是你的项目报错了,把报错解决了就会正常弹出了

把我们申请的App ID填入

配置PhotonServerSettings

开始使用

使用文档
https://doc.photonengine.com/zh-cn/pun/current/getting-started/pun-intro
在项目新建一个空对象,我们将他命名为NewworkLauncher


新建一个脚本代码Launcher,绑定脚本

编写Launcher代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;public class Launcher : MonoBehaviourPunCallbacks
{// Start is called before the first frame updatevoid Start(){//使用我们设置好的PhotonServerSettingsPhotonNetwork.ConnectUsingSettings();}// 是否连接到了服务器游戏大厅public override void OnConnectedToMaster(){Debug.Log("欢迎");PhotonNetwork.JoinRandomRoom();}}

然后运行我们的项目,看看效果,是否成功连接服务器

继续编写代码,实现每当我们客户端连接时生成一个主角,对应的客户端生成对应的主角

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;public class Launcher : MonoBehaviourPunCallbacks
{// Start is called before the first frame updatevoid Start(){//使用我们设置好的PhotonServerSettingsPhotonNetwork.ConnectUsingSettings();}// 是否连接到了服务器游戏大厅public override void OnConnectedToMaster(){Debug.Log("欢迎");PhotonNetwork.JoinRandomRoom();//如果someRoom房间没有就创建,有就加入 /*** 第一个参数:房间的名字* 第二个参数:房间的参数,比如有几个玩家**/RoomOptions roomOptions = new RoomOptions();roomOptions.IsVisible = false;//最多4个玩家roomOptions.MaxPlayers = 4;PhotonNetwork.JoinOrCreateRoom("someRoom", roomOptions, TypedLobby.Default);}}

为主角新增组件

加下面三个组件,并修改对应配置
主要是Photon view组件,表示我们的服务器是否来观察这个游戏角色,修改auto find active

修改玩家控制脚本,实现不同玩家各自操作各种的角色

using Photon.Pun;//...
PhotonView photonView;void Awake()
{//...photonView = GetComponent<PhotonView>();
}void Update()
{//连上服务器但是如果观察的角色不是当前脚本的角色和,不可以操作if(PhotonNetwork.IsConnected && !photonView.IsMine ){return;}//角色操作代码}//...

将玩家设置为预设体,如果希望网络话游戏,需要将玩家预设体添加在Resources里

删除原来的player角色或者隐藏

连接room之后,生成角色预设体,完整Launcher代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;public class Launcher : MonoBehaviourPunCallbacks
{// Start is called before the first frame updatevoid Start(){//使用我们设置好的PhotonServerSettingsPhotonNetwork.ConnectUsingSettings();}// 是否连接到了服务器游戏大厅public override void OnConnectedToMaster(){Debug.Log("欢迎");// PhotonNetwork.JoinRandomRoom();base.OnConnectedToMaster();//如果someRoom房间没有就创建,有就加入 /*** 第一个参数:房间的名字* 第二个参数:房间的参数,比如有几个玩家**/RoomOptions roomOptions = new RoomOptions();roomOptions.IsVisible = false;//最多4个玩家roomOptions.MaxPlayers = 4;PhotonNetwork.JoinOrCreateRoom("someRoom", roomOptions, TypedLobby.Default);}//加入房间方法public override void OnJoinedRoom(){base.OnJoinedRoom();Debug.Log("欢迎11");//生成玩家//参数1:哪个角色//参数2:生成在那个位置生成//参数3:转向方法PhotonNetwork.Instantiate("Player", new Vector3(1,1,0), Quaternion.identity, 0);}
}

效果

申请国内 PUN 云服务器

这里申请的云服务器在国外,网络非常卡顿,可以按照步骤继续申请国内云服务器。

在 https://vibrantlink.com/chinacloudapply/ 网站申请国内 PUN 云服务器,如下:

说明:剩下未展示的选项用户可以随便填写,审批需要等待 1~2 个工作日,审批通过后会收到邮件通知(一般会通过的),申请成功后再使用该 App ID 配置 PhotonServerSettings 就不会网络卡顿。

中国区设置方法

注意: 当你的Appid申请了中国区后,海外的你就用不了了,你可以再创建App一个用于海外区

找到LoadBalancingClient.cs文件修改

public string NameServerHost = "ns.photonengine.io";

public string NameServerHost = "ns.photonengine.cn";


在Assets\Photon|PhotonUnityNetworking\Resources下的PhotonServerSettings
固定区域填入CN

《Unity实战》利用Photon PUN2框架最快最简单实现多人在线游戏相关推荐

  1. 【多人在线游戏架构实战-基于C++的分布式游戏编程】开篇

    学习一门语言很久了,却从来没有用它做过项目,刚学的时候用它来写过一个黑白通讯录,后来又常常用它来刷题.会了Java以后,刷题也不愿意去用这门语言了,没错它就是C++,一把锋利的瑞士军刀.这个国庆节期间 ...

  2. 快节奏多人在线游戏网络入门系列教程(2):客户端预测与服务器协调

    简介 在上一篇文章中,我们简单介绍了权威服务器的体系.客户端发送交互信息给服务器,服务器周期性的更新游戏状态,然后返回游戏状态给客户端. 这个简单体系会导致用户发送命令时和屏幕渲染响应之间的延迟.产生 ...

  3. 快节奏多人在线游戏网络入门系列教程(1):简介

    简介 该系列教程主要讨论快节奏多人在线游戏的网络相关的技术和算法.这是该系列教程的第一章,如果你对多人在线游戏有一定了解,可以跳过本章. 开发任何一款游戏都是一个挑战性的任务.而多人在线游戏增加了更多 ...

  4. Unity联网之使用Socket简单实现多人在线聊天室(一)

    「前言」 之前在一直在写lua联网等一些知识,虽然lua重要,但C#联网也必不可少是吧.所以呢,本篇博客就主要介绍如何使用Unity和C#在实现多人在线聊天室. 服务器 客户端工作原理:(通过消息类型 ...

  5. Unity Unet(四)多人在线游戏框架

    准备设置 打开项目后,进入Window/Services视图. 创建或登录项目ID进入下面面板. 选择Multiplayer进入 选择GoToDashboard进入网页(登录Unity账号) 选择下方 ...

  6. 利用WCF的callback机制开发一个简单的多人游戏模型

    本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...

  7. 利用第三方工具在Unity中创建多人联网游戏

    通常而言,对于不少开发人员而言,开发一款多人在线游戏通常是一件麻烦事,复杂的测试,繁琐的调试过程,还会时不时会出现一些几乎无法复现的BUG.另外,更让人抓狂的是,即便你的代码都能正常工作,但依旧有可能 ...

  8. 利用联网工具Matchvs在Unity中创建多人联网游戏

    通常而言,对于不少开发人员而言,开发一款多人在线游戏通常是一件麻烦事,复杂的测试,繁琐的调试过程,还会时不时会出现一些几乎无法复现的BUG.另外,更让人抓狂的是,即便你的代码都能正常工作,但依旧有可能 ...

  9. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架

    小编说  时间过的好快啊,小伙伴们是不是都快进入寒假啦?但是学习可不要落下哦!  本期教材  本期为大家发放的教材为:<Python机器学习实践指南>.<Tensorflow 实战G ...

  10. TensorFlow:实战Google深度学习框架(四)MNIST数据集识别问题

    第5章 MNIST数字识别问题 5.1 MNIST数据处理 5.2 神经网络的训练以及不同模型结果的对比 5.2.1 TensorFlow训练神经网络 5.2.2 使用验证数据集判断模型的效果 5.2 ...

最新文章

  1. eclipse插件之easyshell
  2. 【转载】混合高斯模型(Mixtures of Gaussians)和EM算法
  3. 工程师忽略的隐形成本
  4. python正则表达式模块_Python正则表达式函数模块
  5. Cortex - M3 位带别名首地址的计算方法
  6. 数据库SQL语句学习笔记(4)-过滤数据
  7. 微信支付宝服务器在哪里,支付宝支付与微信支付服务端回调notify_url数据的区别...
  8. [转] Android实时抓包分析 : 善用adb调试桥
  9. android如何开发ui服务,Android UI-对Activity工作流程的理解(一)
  10. VS C++ 字符大写变换 字符小写变换 tolower toupper
  11. Attit 现代编程语言重要特性 目录 第一章 可读性与开发效率 简单性 1 第一节 垃圾回收 1 第二节 自动垃圾回收 1 第三节 命名参数 函数多返回值 1 第四节 多语言 语言交互性 2 第五
  12. 编译Android系统源码
  13. python中if else语句用法_Python条件语句详解:if、else、switch都有了
  14. AcWing 棋盘挑战 dsf
  15. HTML5 浏览器检测
  16. 如何实现电压、液位等模拟量信号的无线传输?
  17. Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)
  18. [linux命令]查找包含指定内容的文件
  19. html代码中文乱码解决
  20. 哎,开发又被骗了……

热门文章

  1. 安谋科技“权变”迷雾
  2. 找出数组中每个数右边第一个比它大的元素--时间复杂度o(n)单调栈解法
  3. x509: certificate signed by unknown authority (golang http请求报错)
  4. 解决VMware出现Not enough physical memory is available to power on this virtual machine
  5. java读取docx_Java读取doc、docx、xls、xlsx、ppt、pptx、pdf文件内容
  6. 设计模式梳理之代理模式
  7. 夏日葵电商:微信商城系统开发搭建原理与方案分享
  8. 缔元信CEO秦雯致各界朋友的一封信----回归与重建
  9. 12 个在线代码编辑器,有哪个比 GitHub Codespaces 更香?
  10. 怎么看倩碧 黄油的 生产日期 及搭配使用方法