好友

好友

通过申请和好友列表连接玩家。

免费开始使用

好友

通过申请和好友列表连接玩家。

SDK 与 REST

与 Unity、Godot 或 Unreal 集成,或使用 REST 接口。

项目控制台

在项目中配置各项功能并管理当前数据。

快速集成

快速集成

好友
视频即将上线

所选项目的好友、申请与屏蔽。

快速集成
Unity (C#)
using UnityEngine;
using PM.horizOn.Cloud.Manager;

var userId = UserManager.Instance.CurrentUser.UserId;
var manager = FriendsManager.Instance;
var loaded = await manager.GetFriends(userId);
if (!loaded.IsSuccess) { Debug.LogWarning(loaded.ErrorCode); return; }
Debug.Log(loaded.Data.friendCode); // Public identifier, not a credential.
foreach (var friend in loaded.Data.friends)
    Debug.Log(friend.display.name + ": " + (friend.lastActiveAt ?? "unknown"));

// Invoke only after the player explicitly reviews this snapshot and chooses an action.
async System.Threading.Tasks.Task ApplyReviewed(string action, string targetUserId,
    long expectedRevision, string requestId = null)
{
    var result = action switch {
        "request" => await manager.SendRequest(userId, targetUserId, expectedRevision),
        "accept" => await manager.AcceptRequest(userId, targetUserId, expectedRevision, requestId),
        "decline" => await manager.DeclineRequest(userId, targetUserId, expectedRevision, requestId),
        "cancel" => await manager.CancelRequest(userId, targetUserId, expectedRevision, requestId),
        "remove" => await manager.RemoveFriend(userId, targetUserId, expectedRevision),
        "block" => await manager.BlockPlayer(userId, targetUserId, expectedRevision),
        "unblock" => await manager.UnblockPlayer(userId, targetUserId, expectedRevision),
        _ => throw new System.ArgumentException("Unknown action")
    };
    if (!result.IsSuccess) {
        Debug.LogWarning(result.ErrorCode); // Timeout/409: reload and reconcile; do not repeat automatically.
        return;
    }
    Debug.Log(result.Data.revision); // Replace the whole displayed snapshot.
}
// Accept/decline: original incoming requestId. Cancel: original outgoing requestId.
// Never replace expectedRevision on an uncertain retry. A new request is a new identity.
// FindPlayer(userId, exactUuidOrHCode) never searches names or emails.
// Last login is nullable, never an online flag. No hidden polling timer.

这些示例使用 Unity SDK(C#)和 REST API。Godot 和 Unreal 在各自的 SDK 中有相同的调用: 参见快速入门

常见问题

常见问题

准备好开始集成了吗?

今天就开始使用 horizOn 构建你的游戏后端,免费套餐开箱即用。