Photon Unity Networking (PUN) 是为多人对战游戏而生的一个Unity package。灵活的配对让您的玩家进入可以通过网络实现同步对象的房间。 RPCs,自定义属性和“低级”Photon事件是其中的一些功能特性。快速和(可选的)可靠的通信是通过Photon专用服务器完成的,所以客户端不必一对一连接。

PUN 基本上可以支持Unity 的所有平台,并且有两种选择:

PUN2 FREE :包含各种演示、预制脚本和参考文档的免费软件包。基本支持所有的平台。

PUN2 PLUS:不仅PUN2 FREE包含的内容,附加Photon Cloud 的 100 个并发用户计划(约 40k MAU,有效期 12 个月)。

1、PUN2的结构

你通常不必了解PUN包的结构,对于了解它的结构还是有必要提及,PUN封装了三层API:

(1)最上层是 PUN 代码,它实现了 Unity 特定的功能,如网络对象、RPC 等。

(2)第二层包含与 Photon 服务器一起工作、匹配、回调等的逻辑。这是实时 API,可以单独使用。您会注意到 PUN 和 Realtime API(也称为 LoadBalancing API)之间的主题有很多重叠,但这很好。

(3)最底层由 DLL 文件组成,其中包含反序列化、协议等。

2、开始使用

为了充分利用 PUN,您需要进行一些编程。此页面显示了几个重要的代码片段作为概述。

完成学习 "PUN Basics Tutorial"之后,我们就可以开始使用了。

3、连接和回调

ConnectUsingSettings可以立刻上网,它获取PhotonServerSettings上所有重要的设置,你就可以放手去做了。

PhotonNetwork.ConnectUsingSettings();

PUN 使用回调让您知道客户端何时建立连接、加入房间等。

比如:IConnectionCallbacks.OnConnectedToMaster

为了方便使用,PUN拥有MonoBehaviourPunCallbacks,它继承自MonoBehaviour。它实现了重要的回调接口并自动注册,因此您可以继承它并覆盖特定的回调方法。

public class YourClass : MonoBehaviourPunCallbacks
{// ...public override void OnConnectedToMaster(){Debug.Log("OnConnectedToMaster() was called by PUN.");PhotonNetwork.JoinRandomRoom();}// ...
}

或者在任何类中实现 IConnectionCallbacks,并通过 PhotonNetwork.AddCallbackTarget 为回调注册实例。

4、配对系统

OnConnectedToMaster的内部,您可以尝试加入现有房间或创建自己的房间。以下代码片段显示了开始或加入游戏的可能方法调用。

// Join room "someRoom"
PhotonNetwork.JoinRoom("someRoom");
//Fails if "someRoom" is not existing, closed or full. Error callback: IMatchmakingCallbacks.OnJoinRoomFailed// Tries to join any random game:
PhotonNetwork.JoinRandomRoom();
//Fails if there are no open games. Error callback: IMatchmakingCallbacks.OnJoinRandomFailed// Create this room.
PhotonNetwork.CreateRoom("MyMatch");
// Fails if "MyMatch" room already exists and calls: IMatchmakingCallbacks.OnCreateRoomFailed

当朋友们想一起玩并且想通过 PUN 之外的方式进行交流(例如使用 Photon Chat、Facebook)时,他们可以起一个房间名然后使用 JoinOrCreateRoom.。其他人就无法看到这个房间进行匹配。

RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);

使用JoinOrCreateRoom可以让房间按需构造,也不必关心谁先进到房间,如果房间人数满了,则调用IMatchmakingCallbacks.OnJoinRoomFailed(如果您在某处实现并注册它)。

在我们的指南中阅读有关配对的更多信息。

5、游戏逻辑

游戏对象可以通过PhotonView组件实例化为“网络游戏对象” 。它标识对象和所有者(或控制器),控制的玩家会更新其他所有人。

通常,您会将 PhotonView 添加到预制件中,为其选择 Observed 组件并使用 PhotonNetwork.Instantiate 创建实例。

PhotonView 的被观察组件负责每秒多次写入(和读取)网络对象的状态。为此,脚本必须实现 IPunObservable,它定义了 OnPhotonSerializeView。它看起来像这样:

// used as Observed component in a PhotonView, this only reads/writes the position
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}
}

客户端可以调用 Remote Procedure Calls 在不经常发生改变的特定网络对象上。

// defining a method that can be called by other clients:
[PunRPC]
public void OnAwakeRPC(byte myParameter)
{//Debug.Log(string.Format("RPC: 'OnAwakeRPC' Parameter: {0} PhotonView: {1}", myParameter, this.photonView));
}
// calling the RPC somewhere else
photonView.RPC("OnAwakeRPC", RpcTarget.All, (byte)1);

单独的 GameObjects,您还可以发送自己的事件:

PhotonNetwork.RaiseEvent(eventCode, eventContent, raiseEventOptions, SendOptions.SendReliable);

Read more about PUN's RPCs and RaiseEvent.

6、演示和教程

在PUN包中,你能找到一些演示和有用的脚本,他们可以被重复利用、拆解之后重构。

To get properly started, take your time to read and code the "PUN Basics Tutorial".

Photon网络游戏开发——PUN2简介相关推荐

  1. 用 Unity 进行网络游戏开发(一)

    用 Unity 进行网络游戏开发(一) 这是我之前写的了,一直保存在电脑里,现在学习写博客.希望多和大家交流,共同进步,文章中说得不好的地方请指出,谢谢! 使用Unity3D进行网络游戏开发 一.Un ...

  2. 用Unity进行网络游戏开发(一)

    这是我之前写的了,一直保存在电脑里,现在学习写博客.希望多和大家交流,共同进步,文章中说得不好的地方请指出,谢谢! 使用Unity3D进行网络游戏开发 一.Unity3d简介      Unity3d ...

  3. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为&qu ...

  4. HighNewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具

    High&NewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具 导读:在互联网时代,博主经常反思一个问题,如何跟进这个快速发展的时代才能不会被淘汰?博 ...

  5. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  6. Enterprise Library 5.0 开发向导- 简介(1)

    Enterprise Library 5.0 开发向导- 简介(1) 微软企业库 Enterprise Library 5.0 正式发布!!! 在基于微软.NET 框架开发的应用程序中,无论是企业级的 ...

  7. java 并发执行_Java并发执行器的懒惰开发人员简介

    java 并发执行 如果我告诉您util.concurrent API自2004年起提供此类服务,我就会自欺欺人.但是,我想回顾一下一些很酷的功能. 并发专家,现在是时候关闭该窗口了. 所有其他人,请 ...

  8. Java并发执行器的懒惰开发人员简介

    如果我告诉您util.concurrent API自2004年起提供此类服务,我就会自欺欺人.但是,我想回顾一下一些很酷的功能. 并发专家,现在是时候关闭该窗口了. 所有其他人,请紧紧抓住乐趣. 你不 ...

  9. pycharm是不是python编程_使用PyCharm进行python开发的简介

    使用PyCharm进行python开发的简介 这个是很常见的一个问题,我想学习python,用什么编辑器呢? eclipse+pydev? IDLE? vim? 每个人有自己的习惯,可能是自己琢磨的, ...

  10. webstrom 开发工具简介

    webstrom 开发工具简介 验证码 http://idea.javatiku.cn/ 方法 https://www.jianshu.com/p/76f97992bb32

最新文章

  1. Flutter专题1-环境搭建
  2. 一文看懂谷歌的AI芯片布局,边缘端TPU将大发神威
  3. 浅谈Java语言中ArrayList和HashSet的区别
  4. php获取一维,二维数组长度的方法(有实例)
  5. Java拾遗:001 - 重写 equals 和 hashCode 方法
  6. 通过WiFi调试android手机
  7. 带你一文看懂 Blockchain + NoSQL数据库
  8. 计算机在管理会计应用中的作用,信息化在管理会计中的作用
  9. Adaboost python实现
  10. python使用什么关键字声明匿名函数_Python通过关键字____创造匿名函数。
  11. 测试服务器带宽的几种常用方法
  12. 用Python实现温度转换程序
  13. Countdownlatch、CyclicBarrier、join区别
  14. 计算机怎么快捷截图桌面,电脑截屏的快捷键是什么
  15. https://github.com/lin-xin/vue-manage-system
  16. 【转】ESL和ESR的基本認識
  17. android执行lua脚本的方法,android执行lua脚本的方法
  18. PAT10321032 挖掘机技术哪家强 (20 分)
  19. Mathworks MATLAB for Mac (强大的商业数学软件) v9.11
  20. HTML+CSS实现一个线条爱心动画的效果

热门文章

  1. android 连接tftp 服务器
  2. MVC简介——一篇非常简单易懂的介绍
  3. 最简示例 简介洗牌函数 之 __shfl_sync() cuda 之 shuffle
  4. FaWave恢复twitter的办法
  5. 2021年CKA考试真题(二)
  6. Python定时执行程序(schedule)
  7. 仿百度导航跟随效果demo效果示例(整理)
  8. 10个免费网页统计与分析工具
  9. vue/uniapp 百度统计埋点
  10. 【Paper-Attack】Graph Universal Adversarial Attacks: A Few Bad Actors Ruin Graph Learning Models