ICloudSync
云同步能力 SDK 单例,功能入口。
前提条件 | 无 |
业务背景 | 无 |
使用限制 | 无 |
注意事项 | 无 |
相关教程 | 无 |
ICloudSync.Instance
云同步全局单例对象获取。
语法
public static ICloudSync Instance { get; }
代码示例
void TestInitSDK() { var cloudSyncSdk = ICloudSync.Instance; }
ICloudSync.SeatManager
“座位” ICloudSeat 管理器。
语法
public ICloudSeatManager SeatManager { get; }
类型说明
类型为
ICloudSeatManager
,参考 ICloudSeatManager。
代码示例
void TestInitSDK() { var seatManager = ICloudSync.Instance.SeatManager; }
ICloudSync.MatchManager
匹配同玩管理器。
语法
public ICloudMatchManager MatchManager { get; }
类型说明
类型为
ICloudMatchManager
,参考 ICloudMatchManager。
代码示例
void TestInitSDK() { var clientManager = ICloudSync.Instance.MatchManager; }
ICloudSync.Init(...)
云同步 SDK 初始化。
语法
public Task<InitResult> Init( string appId, IVirtualDeviceFactory deviceFactory, IAnchorPlayerInfoProvider playerInfoProvider = null, ISplashScreen splash = null );
参数说明
参数名 | 类型 | 默认值 | 必填 | 说明 |
appId | string | | 是 | 小玩法appId。 形如'tt123456abcd1234' |
deviceFactory | IVirtualDeviceFactory | | 是 | 指定虚拟设备创建工厂 |
playerInfoProvider | IAnchorPlayerInfoProvider | null | 否 | 设置主播的用户信息,包含开平的基本信息,如:NickName, OpenId, AvatarUrl, RoomId |
splash | ISplashScreen | null | 否 | 自定义启动屏界面(一般用于云游戏环境调试,可忽略) |
代码示例
async void Test() { var appId = "tt123456abcd1234"; // 你的小玩法 appId var myDeviceFactory = ...; // 你自定义的 ClientView 创建工厂对象 await ICloudSync.Instance.Init("tt123456abcd1234", myDeviceFactory); }
ICloudSync.OnMouse (事件)
云游戏终端用户触发的鼠标事件。
语法
public delegate void ClientMouseEventHandler(ICloudClient client, RemoteMouseEvent e); public event ClientMouseEventHandler OnMouse;
事件参数说明
参数名 | 类型 | 说明 |
client | ICloudClient | 云游戏终端触发的鼠标事件对应的 ICloudClient 对象(可用于获取主播信息) |
e | RemoteMouseEvent | 云游戏终端触发的鼠标事件 |
代码示例
void Test() { ICloudSync.Instance.OnMouse += OnMouse; } private void OnMouse(ICloudClient client, RemoteMouseEvent e) { if (e.action == MouseAction.DOWN) { Debug.Log($"OnMouse: 主播: {client.Index} MouseDown, view position: {e.viewPosition}"); } }
ICloudSync.OnKeyboard (事件)
云游戏终端用户触发的键盘事件。
语法
public delegate void ClientKeyboardEventHandler(ICloudClient client, RemoteKeyboardEvent e); public event ClientKeyboardEventHandler OnKeyboard;
事件参数说明
参数名 | 类型 | 说明 |
client | ICloudClient | 云游戏终端用户触发的键盘事件对应的 ICloudClient 对象(可用于获取主播信息) |
e | RemoteKeyboardEvent | 云游戏终端用户触发的键盘事件 |
代码示例
void Test() { ICloudSync.Instance.OnKeyboard += OnKeyboard; } private void OnKeyboard(ICloudClient client, RemoteKeyboardEvent e) { if (e.action == KeyboardAction.DOWN) { Debug.Log($"OnMouse: 主播: {client.Index} KeyDown, KeyCode: {e.key}"); } }
ICloudSync.OnTouches (事件)
支持的版本:2.5.0+
。
事件:触摸操作(移动端)。
语法
// 事件:触摸操作(移动端) public event TouchesEventHandler OnTouches; public delegate void TouchesEventHandler(ICloudSeat seat, RemoteTouchesEvent touchesEvent);
事件参数说明
参数 | 类型 | 说明 |
seat | ICloudSeat | 发生该操作的用户席位 |
touchesEvent | RemoteTouchesEvent | 远端触摸事件,包含touches触摸数据 |
RemoteTouchesEvent 触摸数据说明:
/// 触摸事件 public struct RemoteTouchesEvent : IRemoteInputEvent { public IVirtualDevice device { get; set; } public string InputType => "Touch"; public byte displayIndex; /// 触摸touches数据列表 public List<RemoteTouch> touches; } /// 触摸Touch(单个手指的数据) public struct RemoteTouch { /// 触摸手指id public int touchId; /// 触摸阶段类型。 枚举值按`UnityEngine.InputSystem.TouchPhase`对齐,推荐使用。 public RemoteTouchPhase phase; /// 触摸动作类型。 枚举值按云游戏的定义。 public TouchAction action; /// `viewPosition` 左上角坐标 ( 0, 1 ) , 原点在左下角,值范围 0~1.0 public Vector2 viewPosition; /// `position` 左上角坐标 ( 0, Screen.Height ) , 原点在左下角,值范围 0~Screen宽高 public Vector2Int position; }
代码示例
// 监听事件:触摸操作(移动端) ICloudSync.Instance.OnTouches += OnTouches; // 收到事件:触摸操作(移动端) private void OnTouches(ICloudSeat seat, RemoteTouchesEvent evt) { foreach (var t in evt.touches) { if (isTouchVerboseLog) Debug.Log($"OnTouch 触摸: 用户 {seat.Index}, touchId: {t.touchId} {t.phase}, viewPos: {t.viewPosition:F3}, pos: {t.position:F0}, #{Time.frameCount}f"); var viewPos = t.viewPosition; if (t.phase == RemoteTouchPhase.Ended) { ProcessClicked(seat, viewPos, evt.InputType); } } }
备注:
在移动端开播时,不会触发鼠标事件
ICloudSync.OnMouse
。ICloudSync.OnTouch (事件) [已废弃]
废弃的版本:
2.5.0
。云游戏终端用户触发的触摸事件。
语法
public delegate void ClientTouchEventHandler(ICloudClient client, RemoteTouchEvent e); public event ClientTouchEventHandler OnTouch;
事件参数说明
参数名 | 类型 | 说明 |
client | ICloudClient | 云游戏终端用户触发的触摸事件对应的 ICloudClient 对象(可用于获取主播信息) |
e | RemoteTouchEvent | 云游戏终端用户触发的触摸事件 |
代码示例
void Test() { ICloudSync.Instance.OnTouch += OnTouch; } private void OnTouch(ICloudClient client, RemoteTouchEvent e) { if (e.action == KeyboardAction.DOWN) { Debug.Log($"OnMouse: 主播: {client.Index} Touch, position: {e.position}"); } }
ICloudSync.OnSeatPlayerJoined (事件)
当有玩家加入了此座位(也称为进房事件)。
语法
public delegate void SeatEventHandler(ICloudSeat seat); public event SeatEventHandler OnSeatPlayerJoined;
事件参数说明
参数名 | 类型 | 说明 |
seat | ICloudSeat | 玩家加入的 ICloudSeat |
ICloudSync.OnSeatPlayerLeaving (事件)
当玩家正在离开此座位(也称为退房事件)。
语法
public delegate void SeatEventHandler(ICloudSeat seat); public SeatEventHandler OnSeatPlayerLeaving;
事件参数说明
参数名 | 类型 | 说明 |
seat | ICloudSeat | 玩家离开的 ICloudSeat |
ICloudSync.OnWillDestroy (事件)
云游戏实例即将在倒计时 N 秒后销毁。
注意:该事件为一个必接事件,开发者需要响应此事件,在云游戏进程销毁前处理同玩玩家的退出问题。
语法
public delegate void WillDestroyHandler(DestroyInfo info); public event WillDestroyHandler OnWillDestroy;
事件参数说明
参数名 | 类型 | 说明 |
info | DestroyInfo | 云游戏实例即将销毁的信息 |
代码示例
void Test() { ICloudSync.Instance.OnWillDestroy += OnWillDestroy; } private void OnWillDestroy(DestroyInfo e) { Debug.Log($"游戏进程将在: {e.Time} 秒后销毁!"); }
DestroyInfo
语法
/// <summary> /// 云游戏实例即将销毁的信息 /// </summary> public struct DestroyInfo { /// <summary> /// 在 x 秒后销毁 /// </summary> public int Time; /// <summary> /// 原因 /// </summary> public DestroyReason Reason; } /// <summary> /// 云游戏实例即将销毁原因 /// </summary> public enum DestroyReason { /// <summary> /// Host 主播离开 /// </summary> HostAnchorLeave }