【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体
推荐阅读
- CSDN主页
- GitHub开源地址
- Unity3D插件分享
- 简书地址
- 我的个人博客
- QQ群:1040082875
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
稍微关注过博主的同学应该有印象,我已经出过PUN(Photon Unity Networking)插件的教程:
【Unity3D插件】Photon Unity Networking(PUN)插件分享《多人联机服务器》
怎么现在又来了呢?
主要是这篇文章是在2020年发表的,PUN从那时开始已经更新了很多版本。
目前,PUN开发团队也经过了多个版本的迭代开发,现在已经更新到了PUN 2。
PUN 2对比PUN来说的话,连接更稳定,数据传输也更加高效。
那接下来博主就带着大家来看一下新版PUN的使用吧。
二、Photon Unity Networking(PUN)介绍
Photon Unity Networking简称PUN,是一款多人游戏的Unity插件包。
灵活的配对让你的玩家进入可以通过网络同步对象的房间。
快速和可靠的通信是通过专用的Photon服务器完成的,因此客户端不需要一对一的连接。
主要作用就是实现多人游戏的服务器,是一款服务器端和客户端在一起的服务器。
不用再去搭建服务器,PUN是成熟可用的服务器框架,节省造轮子的时间。
三、快速上手
这一节,就带领大家快速上手PUN服务器搭建。
3-1、注册账号
点击进入Photon的官网https://dashboard.photonengine.com。
登录账号:
如果没有注册过账号就点击 Create one… 注册账号:
3-2、创建程序
进入到后台控制页面后,创建一个新的程序:
设置类型和名字:
App ID复制下来,有用:
3-3、在项目中导入PUN2
(1)创建项目
我用的Unity版本是Unity 2019.4.7f1
,设置项目名称和位置(项目名称可以不与前面步骤创建的程序名字一致,我这里是为了方便演示):
注意:PUN2 支持Unity版本,2018.4.22或更高,往下的版本不支持。
(2)打开资源商店
在Unity编辑器面板,使用快捷键Ctrl+9打开商店,搜索PUN:
(3)点击Download下载插件,下载完毕点击Import进行导入:
3-4、设置参数
导入完成后,会弹出参数设置窗口,将前面步骤复制的App ID填入:
点击Skip就可以了。
之后在Assets/Photon/PhotonUnityNetworking/Resources文件夹找到PhotonServerSettings文件,设置参数,将之前复制的App ID复制粘贴进入,APp version设置为1,PUN Loggin 设置Full:
3-5、编写代码
接下来就编写代码测试一下多个客户端是否可以加入到同一个房间。
新建脚本命名为Launcher.cs,双击打开脚本进行编辑:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;public class Launcher : MonoBehaviourPunCallbacks
{void Start(){//初始化用户设置PhotonNetwork.ConnectUsingSettings();}//连接到服务器public override void OnConnectedToMaster(){base.OnConnectedToMaster();Debug.Log("服务器连接成功");//创建或者加入房间 设置最大游戏玩家数PhotonNetwork.JoinOrCreateRoom("Room1", new Photon.Realtime.RoomOptions { MaxPlayers = 20 }, default);}//加入到房间public override void OnJoinedRoom(){base.OnJoinedRoom();Debug.Log("加入到房间:" + PhotonNetwork.CurrentRoom);}
}
将脚本拖到Main Camera对象上。
3-6、运行程序
选择Build And Run运行程序:
然后运行Unity编辑器:
可以看到加入了房间,房间内有两个对象。
当然现在什么效果都没有,没有关系,在接下来的案例中,我们会显示加入后联机的效果。
接下来就来看一下关键API吧。
四、关键API介绍
官方文档在:https://doc.photonengine.com/zh-cn/pun/current/getting-started/pun-intro
4-1、连接和回调
使用ConnectUsingSettings
可以让你应用你资产文件夹中的PhotonServerSettings
的属性设置:
PhotonNetwork.ConnectUsingSettings();
PUN使用回调,让客户端只是何时建立了一个连接,何时加入了一个房间等等。
PUN使用了MonoBehaviourPunCallbacks
接口实现了重要的回调接口并自动注册自己,可以继承它并覆盖特定的回调方法:
//连接到服务器
public override void OnConnectedToMaster()
{base.OnConnectedToMaster();Debug.Log("服务器连接成功");
}//加入到房间
public override void OnJoinedRoom()
{base.OnJoinedRoom();Debug.Log("加入到房间:" + PhotonNetwork.CurrentRoom);
}
4-2、加入、创建房间
在OnConnectedToMaster
之后,可以选择加入一个现有的房间或创建一个房间。
比如说:
// 加入一个名字叫做“Room”的房间
PhotonNetwork.JoinRoom("Room");
// 如果“Room”不存在、关闭或已满,则加入失败。 错误的回调:IMatchmakingCallbacks.OnJoinRoomFailed
// 尝试加入任何随机房间
PhotonNetwork.JoinRandomRoom();
// 如果没有公开放假,则加入失败。 错误的回调:IMatchmakingCallbacks.OnJoinRandomFailed
// 创建一个房间
PhotonNetwork.CreateRoom("MyMatch");
// 如果“MyMatch”房间已经存在则创建失败,错误的回调:IMatchmakingCallbacks.OnCreateRoomFailed
如果说要跟朋友一起玩,则可以设置一个房间名称并使用JoinOrCreateRoom
来加入房间,其他人不应该被分配到这个房间:
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;//不可见
roomOptions.MaxPlayers = 4;//最大游玩人数
PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);
JoinOrCreateRoom
房间是按需创建的,所以谁创建的并不重要,如果房间满了,则加入失败。 错误的回调:IMatchmakingCallbacks.OnJoinRoomFailed
4-3、游戏逻辑
可以同步的对象需要加上PhotonView组件
,它标识对象可以被同步更新给房间内其他对象。
通常这个对象是需要实例化出来的,可以通过PhotonNetwork.Instantiate
创建一个实例化对象。
使用OnPhotonSerializeView
函数去负责写入或读取联网对象的状态,比如:
// 找到使用PhotonView组件的对象,读取或写入位置信息
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{if (stream.IsWriting){Vector3 pos = transform.localPosition;stream.Serialize(ref pos);}else{Vector3 pos = Vector3.zero;stream.Serialize(ref pos); // pos gets filled-in. must be used somewhere}
}
OK,API了解了,接下来就使用一个实例来演示一下怎么使用吧。
五、案例
5-1、场景搭建
新建场景,新建一个Plane和Cube:
注意:将Plane和Cube的位置归零。
给Cube加上Rigidbody组件:
给Cube加上PhotonView组件,如果要同步的话,这个组件是必须的:
将Cube拖到Project视图的Resources文件夹内做成预制体:
5-2、编写脚本
新建脚本ClickFloor.cs,将脚本附给Plane对象:
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ClickFloor : MonoBehaviour
{public GameObject m_CubePrefab;PhotonView photonView;void Start(){photonView = GetComponent<PhotonView>();}void Update(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit)){PhotonNetwork.Instantiate(m_CubePrefab.name, hit.point + new Vector3(0, 3, 0), Quaternion.identity, 0);}}}
}
将Cube拖入卡槽中:
然后新建脚本Launcher.cs编辑代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;public class Launcher : MonoBehaviourPunCallbacks
{private string NetworkClientState;//信息提示void Start(){NetworkClientState = "请稍等...服务器连接中...";//初始化用户设置PhotonNetwork.ConnectUsingSettings();}//连接到服务器public override void OnConnectedToMaster(){base.OnConnectedToMaster();NetworkClientState = "服务器连接成功";Debug.Log(NetworkClientState);//创建或者加入房间 设置最大游戏玩家数PhotonNetwork.JoinOrCreateRoom("Room1", new Photon.Realtime.RoomOptions { MaxPlayers = 20 }, default);}//加入到房间public override void OnJoinedRoom(){base.OnJoinedRoom();NetworkClientState = "加入到房间:" + PhotonNetwork.CurrentRoom;Debug.Log(NetworkClientState);}void OnGUI(){//显示连接信息GUILayout.Label(NetworkClientState, GUILayout.Width(300), GUILayout.Height(100));}
}
点击File→Build And Run运行程序:
然后打开Unity编辑器运行程序:
PUN服务器Demo录制程序
六、后记
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |
【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体相关推荐
- 分享几个好用的WP插件,让你的网站牛逼起来
1.WP Rocket WPRocket缓存插件是目前最高效灵活的WordPress静态缓存插件.它可以优化你的JSCSS文件结构,减少多次请求,达到优化速度的目的.它还集成了图像延迟加载,对于想要最 ...
- [Unity3D]Unity资料大全免费分享
都是网上找的连七八糟的资料了,整理好分享的,有学习资料,视频,源码,插件--等等 东西比较多,不是所有的都是你需要的,可以按 ctrl+F 来搜索你要的东西,如果有广告,不用理会,关掉就可以了,如果 ...
- 分享10个jQuery页面动态编辑插件
为什么80%的码农都做不了架构师?>>> 日期:2012-5-21 来源:GBin1.com 页面动态编辑插件可以非常方便的帮助用户编辑页面内容,但是实现的方式并不是那么简单 ...
- GBin1分享的10个吸引眼球的jQuery插件
日期:2011/10/11 原文:jquery4u.com 编译:GBin1.com GBin1今天特意选取了10个非常吸引眼球的jQuery小组件和插件与大家分享,其中包括图片廊,文本功能提升,及其 ...
- chrono0.10插件离线版_梁宝川:这11条anki插件的使用常识分享给你
每日写一篇文章的第2年195天 anki考研找梁宝川 在我们编辑anki笔记的过程当中,插件我担任着一个非常重要的角色. 因为插件可以帮我们将笔记形式变得更加丰富. 并且,也可以我们更加方便的操作an ...
- 写笔记插件_梁宝川:这11条anki插件的使用常识分享给你
每日写一篇文章的第2年195天 anki考研找梁宝川 在我们编辑anki笔记的过程当中,插件我担任着一个非常重要的角色. 因为插件可以帮我们将笔记形式变得更加丰富. 并且,也可以我们更加方便的操作an ...
- WordPress问答插件DW Question Answer分享
今天发现了这款wordpress在线问答插件,这款插件运用在wordpress上,可谓了给网站增强了不少功能,对于问答.小型论坛来说,这款插件足够使用了!激动人心的是这款wordpress在线问答插件 ...
- 插件分享 | 可以查看摄像头快照的“Hikvision插件”
前言:之前在Goby群里看到有人讨论过海康这个漏洞,自己平时也有遇到过.该漏洞能够查看摄像头的的快照,但是每次都需要手动去访问.耳东表姐一直催插件(没有),所以写一个简单的验证插件来熟悉熟悉goby的 ...
- 分享一款超高颜值的Idea插件——Material Theme UI !!!快来看看
前言 今天,小编在安装Idea的一些插件的时候,发现了一款颜值超高的插件,赶紧安利给大家!!! 插件介绍 插件地址 https://plugins.jetbrains.com/plugin/8006- ...
- 多人在线游戏开发 Unity3D 序言
序言 这本书打算给你以步骤的方式,通过概念和使用unity游戏引擎使用中间插件创建多人游戏.我一直是一个痴迷于多人游戏的的粉丝.他们有方法轻触我们最基本的欲望,如充满了竞争,合作,以及和我们周围的人类 ...
最新文章
- php7 最新版本,总结PHP 7.x 各个版本的新特性
- mysql超大数据库备份
- 代码组织和部署 文件操作 node.js
- 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识
- java bitset_Java BitSet clone()方法及示例
- python-主成分分析-降维-PCA
- oracle 分组_大数据分组怎样才会更快
- 如何将sql server数据库转化成sqlite数据库
- VS中生成、清理项目、调试、開始运行(不调试)、Debug 和 Release等之间的差别...
- pandas dataframe column_数据处理的瑞士军刀pandas | 火星技术帖
- 通过telnet来实践HTTP协议。
- 有哪些能识别英文的语音助手?
- 文字转语音文件现成工具
- 全国城市API(精确到县级)JSON数据
- Matomo API 官方接口详情
- EasyUI入门9 EasyUI+NPOI+QrCode实现带二维码复杂格式excel文件导出
- Ubuntu 16.04 Wifi列表是空的(搜索不到Wifi)的解决方法
- mybatis源码过程学习梳理
- 计算机技术发展的一些随笔总结(我们需要思考)
- 【Linux】 设置支持中文 | 全局
热门文章
- 管家婆打印模板设置_B端移动设计 | 打印配置
- Swift Alamofire SwiftyJson
- 电气绘图软件-AutoCAD Electrical:介绍
- 8000401a 因为配置标志不正确 错误及解决办法
- python做考勤表_500行Python代码打造刷脸考勤系统,其实也就那么简单
- 制作一个简单的通讯录
- 湖北 政府项目 软件 测试,湖北电子政务应用系统技术验收测试规范.doc
- DDOS入门介绍(一):DDOS简介
- OptiCoupe 6:光学切割面板和型材切割优化[OptiCut]
- android手机通讯录格式转换,手机通讯录csv格式转vcf格式工具 安卓电话本数据格式转换程序...