API 文档 / v1.0.2
v1.0.2

API 文档

本页为 SDK v1.0.2 的公开 API 参考。 接入步骤与业务说明见 SDK 开发文档;变更见 更新说明

概述

命名空间以程序集为准:Framework.*Slhx.Game.*Slhx.YooSlhx.UI.Core 等。

场景入口 API
框架初始化FrameworkBootstrap.InitFramework()
进房RoomNetClient.Configure / Connect / Disconnect
房间门面RoomMgr
业务事件EventBroadcastHandler.Register* / Trigger*
自定义消息CustomMessageHandler.RegisterChannel / SendReliable|Unreliable
网络物体NetworkedObjectSpawnObjectRequestOwnership
媒体同步ContentSyncHandler + IContentController
体验区ExperienceAreaHandler.LoadBoundaryPlace / Switch*
AvatarAvatarMgr.SetCatalog
管控AndroidBridge.RegisterCommandReceiverUnityToServiceNative.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.ContentModeOrigin / 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(仅写下列槽位):

IndexName
26Overlay
27Underlay
28Boundary
29OutBoundary
30Avatar

Tags:XRSetupContentAreaContentScenePortal