# TapBattleClient.Initialize

# 功能描述

初始化Tap小游戏多人联机SDK,自动创建OnlineBattleManager实例,并注册事件处理器。这是使用SDK的第一步,必须在调用其他API之前完成初始化。

# 方法签名

public static void Initialize(ITapBattleEventHandler eventHandler)

# 相关方法

public static void UnregisterListener()

取消注册多人联机事件监听器。调用后将停止接收所有SDK事件通知。

# 参数说明

参数名 类型 必填 说明
eventHandler ITapBattleEventHandler 事件处理器实例,用于接收SDK的异步事件通知(如玩家进入房间、对战开始、帧同步等)

# ITapBattleEventHandler 接口

事件处理器需要实现以下接口方法:

public interface ITapBattleEventHandler
{
    // 连接事件
    void OnDisconnected(DisconnectedInfo info);

    // 错误事件
    void OnBattleServiceError(BattleServiceErrorInfo info);

    // 房间属性事件
    void OnRoomPropertiesChanged(RoomPropertiesNotification info);

    // 玩家属性事件
    void OnPlayerCustomPropertiesChanged(PlayerCustomPropertiesNotification info);
    void OnPlayerCustomStatusChanged(PlayerCustomStatusNotification info);

    // 帧同步事件
    void OnFrameSyncStopped(FrameSyncStopInfo info);
    void OnFrameReceived(FrameData frameData);
    void OnFrameSyncStarted(FrameSyncStartInfo info);

    // 玩家事件
    void OnPlayerOffline(PlayerOfflineNotification info);
    void OnPlayerLeft(LeaveRoomNotification info);
    void OnPlayerEntered(EnterRoomNotification info);

    // 消息事件
    void OnCustomMessageReceived(CustomMessageNotification info);

    // 踢人事件
    void OnPlayerKicked(PlayerKickedInfo info);
}

# 使用说明

# 基本流程

  1. 创建实现 ITapBattleEventHandler 接口的事件处理器类
  2. 实例化事件处理器
  3. 调用 Initialize 方法,传入事件处理器实例
  4. SDK 自动创建 OnlineBattleManager 实例并完成初始化

# 注意事项

  • 必须首先调用 - 这是使用SDK的第一步,在调用任何其他API之前必须完成初始化
  • 只需调用一次 - 在应用生命周期内只需调用一次,通常在游戏启动时调用
  • 自动管理Manager - SDK会自动创建和管理OnlineBattleManager实例,开发者无需手动创建
  • 事件处理器不能为空 - 必须传入有效的事件处理器实例,否则无法接收SDK事件
  • 线程安全 - 事件回调会在主线程执行,可以安全地操作Unity对象
  • 取消注册 - 如需停止接收事件通知,可调用 TapBattleClient.UnregisterListener() 方法

# 代码示例

# 示例1:基础初始化

using UnityEngine;

public class BattleManager : MonoBehaviour
{
    void Start()
    {
        // 创建事件处理器实例
        var eventHandler = new MyBattleEventHandler();

        // 初始化SDK
        TapBattleClient.Initialize(eventHandler);

        Debug.Log("多人联机SDK初始化完成");
    }
}

// 事件处理器实现
public class MyBattleEventHandler : ITapBattleEventHandler
{
    public void OnFrameSyncStarted(FrameSyncStartInfo info) {
        Debug.Log($"帧同步开始,房间ID: {info.roomInfo.id}");
    }

    public void OnFrameReceived(FrameData frameData) {
        Debug.Log($"收到第{frameData.id}帧数据,包含{frameData.inputs.Length}个输入");
    }

    public void OnPlayerEntered(EnterRoomNotification info) {
        Debug.Log($"玩家 {info.playerInfo.id} 进入房间");
    }

    // 实现其他接口方法...
    public void OnDisconnected(DisconnectedInfo info) { }
    public void OnPlayerLeft(LeaveRoomNotification info) { }
    public void OnPlayerKicked(PlayerKickedInfo info) { }
    public void OnPlayerOffline(PlayerOfflineNotification info) { }
    public void OnPlayerCustomStatusChanged(PlayerCustomStatusNotification info) { }
    public void OnPlayerCustomPropertiesChanged(PlayerCustomPropertiesNotification info) { }
    public void OnRoomPropertiesChanged(RoomPropertiesNotification info) { }
    public void OnFrameSyncStopped(FrameSyncStopInfo info) { }
    public void OnCustomMessageReceived(CustomMessageNotification info) { }
    public void OnBattleServiceError(BattleServiceErrorInfo info) { }
}

# 最佳实践

  1. 尽早初始化 - 建议在游戏启动时(如首个场景的Awake或Start方法中)就完成初始化
  2. 单例模式 - 通常在单例GameManager中初始化,确保全局只初始化一次
  3. 完整实现事件 - 建议实现所有事件接口方法,至少添加日志以便调试
  4. 错误处理 - 务必实现 OnBattleServiceError 事件,及时处理服务异常
  5. 资源清理 - 在应用退出或切换场景时调用 FinalizeSDK 清理资源
  6. 取消监听 - 在不需要接收事件时(如退出多人模式),可调用 UnregisterListener() 停止事件监听

# 相关API