Photon(一)

来源:互联网 发布:linux 设备与模块 编辑:程序博客网 时间:2024/06/08 08:56

一、Realtime介绍

Photon Realtime是全球范围内运行Photon本地服务器的完全托管服务(SaaS),随时为全球各地的低延迟多人游戏做好准备。

使用LoadBalancing API将玩家与共享游戏会话(称为“会议室”)进行匹配,并在跨平台的连接玩家之间实时同步传输消息。 所有的客户端SDK都可以相互交互,不管是iOS,Android,网络,控制台还是独立的。

二、连接

Photon实时应用程序需要一个AppId来连接。免费注册后,Realtime Dashboard获取你的信息

只需设置你的AppId并选择一个区域来连接。 点击这里查看可用区域的列表

查看代码示例:

using ExitGames.Client.Photon.LoadBalancing; // It is best practice to extend the LoadBalancingClient to modify callbacks and react to updates coming from the server.public class MyClient : LoadBalancingClient{    // call this to connect to Photon    void CallConnect()    {        this.AppId = "<your appid>";  // set your app id here        this.AppVersion = "1.0";  // set your app version here         // "eu" is the European region's token        if (!this.ConnectToRegionMaster("eu")) // can return false for errors        {            this.DebugReturn(DebugLevel.ERROR, "Can't connect to: " + this.CurrentServerAddress);        }    }    // [...]
三、呼叫服务

LoadBalancing API的构建与您的游戏逻辑很好地集成在一起。您可以精确控制何时处理传入的消息,以及多久发送一次。在内部,两个方向都被缓冲,直到你的游戏通话LoadBalancingClient.Service()

游戏通常使用游戏循环计算更新,然后刷新屏幕。Service()每秒拨打10到20次。如果你不这么称呼,那么根本就没有“网络进步”。

查看代码示例:


四、断开连接

当应用程序正在退出或用户注销时,不要忘记断开连接。

查看代码示例:

五、对接

5.1创建一个游戏

要创建一个新房间,又名游戏,请在连接的LoadBalancing客户端上调用“创建房间”操作。

查看代码示例


这设置了房间中允许的房间名称和数量。客户将自动进入新的房间。当使用“创建房间”操作时,房间将在加入之前创建(如果不存在)。房间存在,直到最后一名玩家离开。

您可以定义“自定义房间属性”,以便在创建房间时为其设置共享值。可以使用自定义房间属性(例如)来存储地图名称,级别或回合持续时间。自定义属性的键必须是字符串。当然,这些值也可以在房间里设置和修改。

您可以选择任何自定义属性在大厅中显示,方法是将可选数组的名称设置为“大厅的自定义房间属性”。在大厅中显示的属性可以用于配对,也可以用作随机匹配的过滤器。

阅读更多关于我们的指南在这里配对

5.2找游戏

客户可以通过名字加入游戏,或者向Photon寻求完美匹配。

查找房间...

  • 通过随机:随机匹配的球员。有选择地填满房间或平均分配玩家。
  • 在随机匹配中使用过滤器以获得更好的匹配。
  • 通过列表:大厅列出可见的房间,让玩家手动选择和加入。
  • 这是私人的:加入隐藏的房间,你知道的名字。
  • 参数化:通过定义期望的属性来自定义随机匹配。

查看代码示例


六、继续游戏

随着光子实时,房间的数据可以保存和轻松加载。您需要安装webhooks来连接外部Web服务器的Photon Cloud。

一旦设置,房间状态将自动保存为您。重新加入房间:

查看代码示例:


这个功能使得异步的比赛和游戏成为可能。

阅读我们的持久性指南中有关如何执行此操作的更多信息

七、游戏

7.1发送事件

无论发生在一个客户端上的事情都可以作为事件来发送,以更新同一个房间中的每个人

用统计数据,位置或目前轮次更新您的球员。Photon将尽可能快地发送(可选可靠性)。

  • 发送消息/事件:发送任何类型的数据给其他玩家。
  • 玩家/房间属性:光子更新和同步这些,甚至以后加入的玩家。
查看代码示例:


你的事件代码应该保持在200以下。每个代码应该定义事件的类型和它携带的内容。

上例中的事件数据是a Hashtable它可以是一个byte[]或基本上由光子的序列化(所支持的任何数据类型stringfloat[]等等)。请参阅Photon中的序列化以获取更多信息。

7.2接受事件

每当一个事件发送一个处理程序被调用。一个例子如下所示。

查看代码示例:


每个事件都以客户发送它们的方式传送其代码和数据。你的应用程序知道哪些内容需要通过代码传递(见上文)。

有关默认事件代码的最新列表,请在您的SDK中查找事件代码常量,例如在ExitGames.Client.Photon.LoadBalancing.EventCodeC#中。

8、自定义或授权服务器逻辑

如果没有权威的逻辑,Photon Cloud产品已经允许广泛的游戏类型。

  • 第一人称射击游戏
  • 赛车游戏
  • Minecraft类型的游戏
  • 休闲的实时游戏
  • 异步和同步游戏
  • ...

使用光子服务器光子插件来实现自己的自定义逻辑。