Skip to main content
本节介绍如何将 PlayFab 与 Photon 多人游戏服务(如 Photon RealTime 和 Photon Unity Networking (PUN))一起使用。 目前,我们提供以下 Photon 集成:
  • 使用 PlayFab 对 Photon 玩家进行身份验证。
  • 使用 PlayFab CloudScript 回调侦听房间事件。

Photon 快速入门

本快速入门介绍如何设置 Photon Multiplayer 与 PlayFab 协同工作。目前,PlayFab 提供以下 Photon 集成:
  • 使用 PlayFab 对 Photon 玩家进行身份验证。
  • 使用 PlayFab CloudScript 回调侦听房间事件。
在本快速入门中,我们使用最新的 Photon Unity 示例项目演示这两项功能的工作方式。
有关 Unity 上完全受支持的 PlayFab 多人游戏和聊天体验,请参阅 PlayFab Party Unity 插件获取更多信息。

先决条件

  1. 一个已导入 PlayFab SDK 并已配置游戏的 Unity 项目。
  2. 已注册的 PlayFab 游戏。
本指南省略了 Chat 应用程序的设置。若要集成 Chat 应用程序,请创建一个新的 Photon Chat 应用程序,并在 Unity 中以及 PlayFab Game Manager - Photon Add-on 页面中相应的框中输入 App ID。

设置 Photon 应用程序

  1. 注册并登录到 Photon 仪表板后,选择 Create a new App
创建一个新的 Photon 应用程序
  1. 选择 Photon Type
  2. 选择 Name
  3. 创建 Description
  4. 通过选择 Create 提交。
新应用程序表单

设置身份验证

  1. 在列表中找到新创建的应用程序,然后选择 Manage
管理测试应用程序
  1. Application 仪表板中,找到并保存位于页面 Title 下的 App ID
保存 App ID
  1. 找到 Authentication 部分。
  2. 选择 Custom Server
自定义服务器身份验证 下一页允许你为 Photon 配置身份验证 URL。
PlayFabTitleId 占位符替换为你自己的 Title Id。
  1. 输入 URL
  2. 通过选择 Create 按钮提交。
输入身份验证 URL

为 Photon 设置 PlayFab 游戏

导航到游戏的 Game Manager 页面,然后:
  1. 导航到 Add-ons 选项卡。
  2. Add-ons 列表中,找到并选择 Photon
Game Manager Add-ons 选项卡
  1. Photon Add-on 页面允许你通过指定 Photon Realtime Application ID 来安装 Photon。
    • 或者,你也可以指定 Chat App ID
    • 安装 Add-on (3) 后,会生成 Photon secret Key (2)
    • 保存它以便将来配置 Webhook 时使用。
请记得将 Photon secret key 保存在安全且易于访问的位置。它在配置 Webhook 时会派上用场。
复制 Realtime App ID

设置 Photon Webhook

作为可选集成,Photon 可以将某些事件传输到你的 PlayFab CloudScript。这是通过 Webhook 完成的:
  • 你指定一个 Base URL。
  • 然后为每个可用事件指定路径。
  • 实际上,路径就是你 CloudScript 中实现的处理程序名称。
Base URL 具有以下格式:
请务必将 Title Id 占位符替换为你自己的 Title Id。
请务必将 PhotonSecretKey 令牌替换为你在 Photon Add-on 页面上生成的密钥。
  1. 填写 Base URL
  2. 为每个可用的 Events 指定一个 CloudScript 处理程序 Name
  3. 移除所有 CustomHttpHeaders
  4. 通过选择 Save 按钮提交。
指定 CloudScript 事件处理程序

设置 Unity 项目

本指南假设你已导入 PlayFab SDK、完成设置,并配置了游戏设置。
  • 开始时导航到 Asset Store
  • 找到 Photon Unity Networking Free 包
  • 选择 Import (1)
  • 你可以检查导入的文件。
  • 然后选择 Import (2)
导入 Photon Unity 导入过程完成后,PUN Setup 窗口会打开。
  • 输入你为所创建的 Photon AppPhoton Application Dashboard 中找到的 Realtime Application ID (1)
  • 选择 Setup Project (2)
  • 设置完成后,选择 Close (3)
PUN 设置 如果 AppId 被接受,Photon Server Settings 对象将被选中并可在 Unity Inspector 窗口中查看。若要手动访问 Server Settings 对象:
  • 导航到顶部窗口面板。
  • 选择 Window
  • 然后选择 Photon Unity Networking (1)
  • 最后选择 Highlight Server Settings (2)
  • Standard Unity 项目窗口会显示 PhotonServerSettings (3) 对象。
  • 选择该对象以在 Unity Inspector 窗口中查看其设置。
Photon 服务器设置
作为 PhotonServerSettings 的一部分,你可以选择指定 Chat Application ID
此时,项目已配置完毕。

实现从 PlayFab 到 Photon 的身份验证

当你在 PlayFab Game Manager 中为游戏启用 Photon Add-on,并在 Photon Application 仪表板上配置身份验证时,PlayFab 允许你在 Photon 环境中对现有的 PlayFab 玩家进行身份验证。 这意味着你可以完全避免为 Photon 实现任何用户管理。
  1. Photon Unity Networking Free 包(Classic 版本)导航到 DemoHub-Scene-V2 场景。
    • 此场景是包中所有示例的中心。
    • 因为它是要加载的第一个场景,让我们添加一个小脚本来启用使用 Photon 对 PlayFab 进行身份验证。
  2. 创建一个名为 PlayFabAuthenticator 的空 GameObject
  3. 然后在 Unity Inspector 窗口中,向此 GameObject 添加一个同名组件。
添加身份验证组件 选择齿轮图标,然后从下拉菜单中选择编辑脚本。复制并粘贴 PlayFabAuthenticator 组件的代码,然后保存并关闭文件。

测试从 PlayFab 到 Photon 的身份验证

  1. 启动场景。
  2. 检查控制台消息的流。 控制并确保:
  3. 到 PlayFab 本身的身份验证成功。
  4. 已获取 Photon 令牌。
下图说明了正确的流程。 启动场景 获取 Photon 令牌并完成身份验证后,我们就可以查看 Photon 演示了。 例如,启动名为 Demo Boxes 的演示。
  1. 若要确保 PlayFab 身份验证完成,请选择 Demo Boxes
  2. 然后如下图所示选择 Load Demo
加载演示 Photon 开始输出调试消息。通过监视你的控制台,可以轻松发现是否有任何身份验证问题。 Photon 调试控制台 确保控制台中没有 Authentication Denied 错误。此时,你已完成最低限度的 PlayFab 和 Photon 集成设置。

Photon 房间事件 + CloudScript

Photon 匹配系统有一个 Room(房间)的概念。如果你不熟悉此概念,请参阅 Photon 匹配指南 PlayFab 允许你拦截各种房间事件。以下房间事件仅需 CloudScript 即可拦截:
  • RoomCreated
  • RoomJoined
  • RoomLeft
  • RoomClosed
以下事件需要对 Unity 代码进行额外控制才能拦截(细节将在本文档稍后给出):
  • RoomPropertyUpdated
  • RoomEventRaised
一旦你为某个房间事件引入了处理程序,它就成为事件处理流程的重要组成部分。因此,你的 CloudScript 在运行时产生的错误可能会对整个系统造成问题。例如,如果 RoomCreated 处理程序抛出错误,你的客户端也会抛出错误,并且将无法正确连接。
让我们通过为每种事件类型单独定义处理程序来构建一个 PlayFab CloudScript。

Room Created 处理程序

每次创建 Photon 房间时都会调用 RoomCreated 处理程序。以下 CloudScript 处理程序拦截此类事件。
你可以使用 “args” 参数获取有关该事件的更多数据。

Room Joined 处理程序

每次有玩家加入房间时都会调用 RoomJoined 处理程序。以下 CloudScript 处理程序拦截此类事件。
对于第一个进入房间的用户,不会调用此回调。请使用 RoomCreated 来拦截第一个加入的玩家。你可以使用 “args” 参数获取有关该事件的更多数据。

Room left

每次有玩家离开房间时都会调用 RoomLeft 处理程序。以下 CloudScript 处理程序拦截此类事件。
你可以使用 “args” 参数获取有关该事件的更多数据。

Room Closed 处理程序

每次最后一位玩家离开房间导致房间没有玩家时,都会调用 RoomClosed 处理程序。以下 CloudScript 处理程序拦截此类事件。
你可以使用 “args” 参数获取有关该事件的更多数据。

Room Property Updated

每次房间属性发生更改时都会调用 RoomPropertyUpdated 处理程序。以下 CloudScript 处理程序拦截此类事件。
此处理程序中的 currentPlayerId 未定义。如果房间属性是从客户端更改的,你可以使用 “args” 参数,并参考 UserId 来获取负责此操作的玩家。
你可以使用 “args” 参数获取有关该事件的更多数据。
在使用 Unity Photon 客户端更改自定义房间属性时,重要的是标记该调用,以便将事件传递给 Webhook(在此为 PlayFab)。

Room Event Raised

每次触发自定义房间事件时都会调用 Room Event Raised。以下 CloudScript 处理程序拦截此类事件。
你可以使用 “args” 参数获取有关该事件的更多数据。
在使用 Unity Photon 客户端触发自定义房间事件时,标记该调用非常重要,以便将事件传递给 Webhook(在此为 PlayFab)。

测试 Room Event 处理程序

此示例扩展了前面的示例(PlayFab + Photon 身份验证)。 为你的游戏上传以下 CloudScript。
这段代码所做的仅仅是在每次调用 Photon 回调时发布一个新的游戏事件。在生产环境中虽然没有用,但此示例让我们能够清楚地看到回调是如何被调用的。 通过包含新的示例代码来扩展 PlayFabAuthenticator 脚本,该示例代码会触发自定义事件并设置自定义房间属性。扩展版本还使用 Awake 方法,以便在场景加载之间不销毁对象。
  • 运行 hub 场景并等待 PlayFab 身份验证完成 (1)
  • 然后加载 Boxes Demo 场景 (2)
加载 Demo Boxes 场景
  • 场景加载完成后,等待对等方连接到新创建的房间 (1)
  • 然后在左上角选择 Execute Example (2)
  • 观察控制台输出 (3)
  • 确保没有发生错误。
Execute Example 不要忘记停止 Unity 的运行。这是为了确保我们也能收到 RoomLeftRoomClosed 事件。 导航到游戏的 Game Manager 页面,并查看 PlayStream 面板。你应该能够看到我们的 CloudScript 代码在处理 Photon 事件时生成的事件。
  1. 最初,我们的 Photon 实例没有打开的房间。当我们启动示例时,Photon 为 Boxes Demo 创建了房间。
  2. 第一个加入的玩家就是请求创建房间的玩家。因此没有记录 RoomJoined Event。然后我们执行了示例代码:
    • 首先,我们触发了一个自定义 Room Event
    • 然后,我们设置了一个自定义 Room Property
    • 然后我们停止了 Unity 播放模式。这导致我们的客户端离开了房间。
  3. 由于我们断开连接的客户端是最后一个,没有更多客户端,Photon 关闭了房间。
所有事件都应该记录到 PlayStream 事件流中,如下图所示。 PlayStream 事件流 此时,你已将 Photon 事件支持完全集成到你的 PlayFab 游戏中。
最后修改于 2026年8月13日