API 文档
本页为 SDK v1.0.2 的公开 API 参考。 接入步骤与业务说明见 SDK 开发文档;变更见 更新说明。
概述
命名空间以程序集为准:Framework.*、Slhx.Game.*、Slhx.Yoo、Slhx.UI.Core 等。
| 场景 | 入口 API |
|---|---|
| 框架初始化 | FrameworkBootstrap.InitFramework() |
| 进房 | RoomNetClient.Configure / Connect / Disconnect |
| 房间门面 | RoomMgr |
| 业务事件 | EventBroadcastHandler.Register* / Trigger* |
| 自定义消息 | CustomMessageHandler.RegisterChannel / SendReliable|Unreliable |
| 网络物体 | NetworkedObject、SpawnObject、RequestOwnership |
| 媒体同步 | ContentSyncHandler + IContentController |
| 体验区 | ExperienceAreaHandler.LoadBoundaryPlace / Switch* |
| Avatar | AvatarMgr.SetCatalog |
| 管控 | AndroidBridge.RegisterCommandReceiver、UnityToServiceNative.Send |
Framework
using Framework.Core;
// Awake 调用一次
FrameworkBootstrap.InitFramework();
// 常用服务(经 ServiceLocator)
// ILog / IEventBus / ICoroutineRunner / ITimeService / IResourceService / ISceneService ...
枚举标注(Extension)
命名空间 Framework.Extension。可在枚举字段上挂字符串,与业务表映射:
| API | 说明 |
|---|---|
[Description("…")] / GetDescByEnum |
常用作场景名或显示文案(.NET DescriptionAttribute) |
[ExperienceAreaId("…")] / GetAreaIdByEnum |
空间体验区 id(如 Boot placeItems id);无标注时返回空串,不回退枚举名 |
using System.ComponentModel;
using Framework.Extension;
public enum MyContentStep {
[Description("Level_A")] // 场景名
[ExperienceAreaId("area_01")] // 体验区 id(≠ 场景名)
Wear = 0,
}
string scene = MyContentStep.Wear.GetDescByEnum();
string area = MyContentStep.Wear.GetAreaIdByEnum();
内容步骤表与房间推进示例见开发文档 §14 内容推进。 Runtime 切区仍只认 placeItems / Handler 的 areaId,见 §13 体验区。
Boot / 配置
using Slhx.Game.ToB;
// BootSystem 场景组件
// · testDeviceSn:Editor 设备号(ParrelSync Clone 须改成与主工程不同)
// · editorMapConfigUrl:Editor 地图 config(相对 Assets / 绝对路径 / file://)
// · ResolveBootConfigPath():当前读取的 boot 配置完整路径
string path = BootSystem.Instance.ResolveBootConfigPath();
// 真机:/sdcard/Download/lycj/boot/config.json
// Editor 默认:Assets/Slhx/Samples/Map/config.json
| API | 说明 |
|---|---|
ProductPaths.AndroidBootConfigPath | 真机 boot 路径 |
ProductPaths.ResolveEditorMapConfigPath(url) | 解析 Editor 地图路径 |
BootSystem.DeviceSn / SetDeviceSn | 设备 SN |
BootSystem.ContentMode | Origin / LargeSpace |
房间与网络
using Slhx.Game.LiteNet;
RoomNetClient.Instance.Configure("192.168.x.x", 11001); // Editor 联调
RoomNetClient.Instance.Connect();
// RoomNetClient.Instance.ConnectStatus == Connected 后再发业务
RoomNetClient.Instance.Disconnect();
// 门面(场景需挂 RoomMgr + 各 Handler)
RoomMgr.Instance.RequestOwnership(objectId, force: false);
| 类型 | 职责 |
|---|---|
RoomNetClient | 连接、Configure、收发底层消息 |
RoomMgr | 房间门面:Spawn、所有权等 |
MemberHandler | 成员列表 / Avatar 进出 |
TransformHandler | 成员位姿 |
ObjectSyncHandler | 网络物体同步与所有权 |
EventBroadcastHandler | 业务事件广播 |
CustomMessageHandler | 频道自定义消息 |
Android 真机端口 11001 会跳过连接(占位保护);真机请使用 Agent 下发的地址端口。
事件广播
// 注册
EventBroadcastHandler.Instance.RegisterEvent(eventId, OnEvent);
// 发送
EventBroadcastHandler.Instance.TriggerEvent(eventId, payload);
// 注销
EventBroadcastHandler.Instance.UnregisterEvent(eventId, OnEvent);
须在 Connected 后发送;eventId 与 Samples 示例号段勿冲突。
自定义消息
CustomMessageHandler.Instance.RegisterChannel(channelId, OnMsg);
CustomMessageHandler.Instance.SendReliable(channelId, bytes);
CustomMessageHandler.Instance.SendUnreliable(channelId, bytes);
// 未 Register 的 channel 仅警告,不处理
网络物体
// 场景物体:挂 NetworkedObject,objectId ≥ 1000(编辑器自动分配)
// 仅 Owner 同步 Transform;默认 Current Owner = -1
// 代码
netObj.RequestOwnership(force: false);
netObj.SyncNow(); // 须已是 Owner
// Inspector 组件右键(Play 且已进房)
// · 申请所有权
// · 强制申请所有权
// · 立即同步
// 运行时生成
RoomMgr.Instance.RegisterPrefab("MyProp", prefab);
uint id = RoomMgr.Instance.SpawnObject("MyProp", pos, rot, scale, customData: "{}");
| 字段 / API | 说明 |
|---|---|
objectId | 全房唯一;静态 ≥1000,运行时 Spawn ≥1e6 |
syncPosition / Rotation / Scale | 同步通道开关 |
autoRequestOwnership | 默认关;调试可开或右键申请 |
RequestOwnership(force) | 申请 / 强制申请所有权 |
ObjectSyncHandler.MarkDirty / SyncObject | 脏标记与手动推送 |
内容播放同步
// 实现 IContentController,挂到 ContentSyncHandler
public class MyVideo : MonoBehaviour, IContentController {
public void ApplySyncState(ContentSyncMsg msg) { /* ... */ }
public float GetCurrentTime() => ...;
public float GetDuration() => ...;
public ContentState GetCurrentState() => ...;
}
体验区
// LoadBoundaryPlace 后按 placeItems / areaId 生成
ExperienceAreaHandler.Instance.LoadBoundaryPlace(...);
ExperienceAreaHandler.Instance.SwitchExperienceArea(areaId); // areaId = placeItems.id,不是内容场景名
// 预览 / 安全层相机 mask 等见组件与开发文档 §13
areaId ≠ Unity 内容场景名。
模板 areaId 须与 Boot placeItems[].id 一致。
Editor 地图工具:Tools → Slhx → 地图体验区配置工具。
Avatar
AvatarMgr.Instance.SetCatalog(catalog);
// 成员进出由 MemberHandler + AvatarMgr 驱动
Android / 管控
// 收:管控 → Unity
AndroidBridge.Instance.RegisterCommandReceiver(json => { /* ... */ });
// 发:Unity → 管控(默认 agent + server 双发)
using Slhx.Game.Net;
UnityToServiceNative.Send("{\"type\":\"yourCmd\"}");
UnityToServiceNative.SetBroadcastPackages("com.lanyuxujie.server"); // 可选单包
UnityToServiceNative.SetBroadcastPackages(null); // 恢复默认
Android 桥接固定 com.slhx.android;applicationId 可为产品包名。
Yoo 资源(3.x)
// 依赖 com.tuyoogame.yooasset 3.0.4;Slhx.Yoo 已按 3.x API 适配
// YooLocalRepoInit / YooLoaderFlow / ContentUpdateService
// Editor 模拟 / LocalRepo Host 见开发文档与包内 README
工程 Layers / Tags
导入新工程后执行 Tools → Slhx → 安装/修复 Layers 与 Tags(仅写下列槽位):
| Index | Name |
|---|---|
| 26 | Overlay |
| 27 | Underlay |
| 28 | Boundary |
| 29 | OutBoundary |
| 30 | Avatar |
Tags:XRSetup、ContentArea、ContentScene、Portal。