# 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 是多人联机系统最重要的概念!

  1. 判断自己 - 在房间玩家列表中识别"哪个是我"

    foreach (var player in roomInfo.players) {
        if (player.id == myPlayerId) {
            Debug.Log("这是我!");
        }
    }
    
  2. 判断房主 - 识别当前用户是否为房主

    bool isOwner = (player.id == myPlayerId) && (player.id == roomInfo.ownerId);
    
  3. 发送输入 - 在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("连接请求完成");
            }
        });
    }
}

# 最佳实践

  1. 立即保存playerId - success回调中第一时间保存playerId到成员变量
  2. 全局访问 - 建议将playerId保存到全局单例或静态变量,方便各处访问
  3. 错误处理 - 实现fail回调,给用户友好的错误提示
  4. 网络检查 - 连接前检查网络状态,避免无网络时调用
  5. 重试机制 - 连接失败时提供重试按钮,让用户可以重新连接

# 常见问题

# Q: 必须调用Connect吗?

A: 不是必须的,但强烈建议调用。Connect返回的playerId是判断玩家身份的核心数据。

# Q: playerId会变化吗?

A: 在同一次连接中不会变化。断线重连后可能会分配新的playerId。

# Q: 连接失败怎么办?

A: 检查网络连接,提供重试按钮让用户重新尝试连接。

# 相关API