# TapBattleClient.Connect
# 功能描述
连接多人联机服务器,成功后返回playerId(玩家全局唯一标识)。playerId是判断玩家身份、房主身份的核心数据,必须妥善保存。
# 方法签名
public static void Connect(BattleConnectOption option)
# 参数说明
# BattleConnectOption
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| success | Action<BattleConnectResult> | 否 | 连接成功回调 |
| fail | Action<TapCallbackResult> | 否 | 连接失败回调 |
| complete | Action<TapCallbackResult> | 否 | 连接完成回调(无论成功失败) |
# BattleConnectResult(成功时返回)
| 字段名 | 类型 | 说明 |
|---|---|---|
| playerId | string | 玩家全局唯一ID,用于判断"我是谁"和"谁是房主" |
| errMsg | string | 成功时为"connect:ok" |
# 使用说明
# playerId 的重要性
playerId 是多人联机系统最重要的概念!
判断自己 - 在房间玩家列表中识别"哪个是我"
foreach (var player in roomInfo.players) { if (player.id == myPlayerId) { Debug.Log("这是我!"); } }判断房主 - 识别当前用户是否为房主
bool isOwner = (player.id == myPlayerId) && (player.id == roomInfo.ownerId);发送输入 - 在SendFrameInput数据中标识操作来源
var inputData = new { playerId = myPlayerId, action = "move" };
# 注意事项
- 必须保存playerId - Connect成功后立即保存playerId,后续判断身份都依赖它
- 建议调用 - 虽然不是必须,但强烈建议在初始化后调用Connect
- 一次连接 - 通常在应用生命周期内只需连接一次
# 代码示例
# 示例1:基础连接
using UnityEngine;
public class ConnectionManager : MonoBehaviour
{
private string myPlayerId;
void Start()
{
// 先初始化SDK
TapBattleClient.Initialize(new MyBattleEventHandler());
// 连接服务器
TapBattleClient.Connect(new BattleConnectOption
{
success = (result) => {
// ⚠️ 重要:保存playerId
myPlayerId = result.playerId;
Debug.Log($"连接成功,playerId: {myPlayerId}");
},
fail = (result) => {
Debug.LogError($"连接失败: {result.errMsg}");
},
complete = (result) => {
Debug.Log("连接请求完成");
}
});
}
}
# 最佳实践
- 立即保存playerId - success回调中第一时间保存playerId到成员变量
- 全局访问 - 建议将playerId保存到全局单例或静态变量,方便各处访问
- 错误处理 - 实现fail回调,给用户友好的错误提示
- 网络检查 - 连接前检查网络状态,避免无网络时调用
- 重试机制 - 连接失败时提供重试按钮,让用户可以重新连接
# 常见问题
# Q: 必须调用Connect吗?
A: 不是必须的,但强烈建议调用。Connect返回的playerId是判断玩家身份的核心数据。
# Q: playerId会变化吗?
A: 在同一次连接中不会变化。断线重连后可能会分配新的playerId。
# Q: 连接失败怎么办?
A: 检查网络连接,提供重试按钮让用户重新尝试连接。
# 相关API
- TapBattleClient.Initialize - 初始化SDK(连接前必须先初始化)
- TapBattleClient.Disconnect - 断开服务器连接
- TapBattleClient.MatchRoom - 匹配房间(通常在连接后调用)
