核心组件
核心运行逻辑
Act Unit
概述
Act Unit 是 YOMOV SDK Core 中的 Act 级描述组件,对应运行程序集中的 YomovActDescriptor。它通常挂载在一个 Act 根对象上,Act 根对象下再组织多个 Plot 级对象。该组件保存 Act 的名称、唯一 ID、Act 边界、入口区域、核心区域、入口/出口点、Act 切换事件和转场参数,是 YomovActManager 组织 Act / Plot 层级、编辑器校验边界和导出 Act 数据的重要依据。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
id | Act 唯一 ID | 当前 Act Unit 的唯一标识,用于区分不同 Act,并支持编辑器校验、数据导出和运行时 Act 定位。复制 Act 后应避免多个 Act 共用同一个 ID。 | GUID string;示例:01e82b28-1e49-4ced-8a52-4d6dfe0d4d96 |
actName | Act 名称 | 当前 Act 的名称和运行标识,用于 Act 查找、层级组织、路径导出和事件关联。建议与 Act 根对象命名保持一致,并在版本迭代中保持稳定。 | string;示例:1 Act01、Vehicle02 Act01 |
tutoringAct | 教学 Act 标记 | 标记当前 Act 是否为教学或引导用途的 Act。编辑器中存在相关校验逻辑;具体运行差异需要结合当前项目流程确认。 | bool;true / false;示例场景多为 false;具体运行影响需确认 |
OnSwitchAct | 切换 Act 事件 | 当前 Act 被切换或加载时触发的事件入口。内容方可在这里绑定 Act 初始化、Timeline 播放、机关启用、UI 刷新或自定义状态同步逻辑。 | UnityEvent |
actAreaPoints | Act 边界点 | 当前 Act 的整体边界多边形。编辑器可根据子 Plot 边界生成或更新该边界,并用它做 Act 区域校验、动线连接和边界显示依据。 | Vector3[];局部坐标;通常为 4 个或更多点,y 通常为 0 |
arrivalAreaPoints | 入口区域边界点 | 当前 Act 的入口/到达区域边界。该区域用于描述玩家开始体验当前 Act 的范围,并与上一个 Act 的离开区域或动线衔接。 | Vector3[];局部坐标;通常为闭合多边形点集 |
mainAreaPoints | 核心区域边界点 | 当前 Act 的核心体验区域边界。编辑器校验中要求核心区域位于 Act 边界内部,用于区分主要体验空间与入口、离开或缓冲区域。 | Vector3[];局部坐标;应位于 actAreaPoints 描述的范围内 |
EntrancePosition | 入口位置 | 玩家进入当前 Act 时的参考位置,用于场地对齐、入口提示、路径导出或与真实边界的动线关系计算。 | Vector3;示例:{x: -1.5, y: 0, z: -3} |
EntranceRotation | 入口朝向 | 玩家进入当前 Act 时的参考朝向,通常与 EntrancePosition 配套使用,用于确定进入 Act 后的初始面向或动线方向。 | Vector3 欧拉角;示例:{x: 0, y: 0, z: 0} |
exitPoint | 出口点 | 当前 Act 的离开/出口引导点,用于退出提示、移动真实边界锚点、或衔接后续 Act 的路径关系。通常由编辑器绘制或工具更新。 | Vector3;局部坐标;示例:{x: 0.108814836, y: 0, z: -0.98033345} |
isExitPointSet | 出口点已设置 | 记录 exitPoint 是否已经通过编辑器或工具设置。用于编辑器绘制、校验和避免未设置出口点时误用默认值。 | bool;工具维护字段;示例值:true |
isCenterPointUpdated | 中心点已更新 | 记录 Act 根对象中心点是否已根据几何中心更新。用于编辑器坐标修正和边界点相对坐标维护,通常不需要内容方手动修改。 | bool;工具维护字段;示例值:true |
transitionEffect | Act 转场效果 | 定义切换到当前 Act 或离开当前 Act 时使用的转场效果。运行时可由 YomovActManager 的转场流程读取并播放对应效果。 | TransitionEffect;None = 0,FadeInOut = 1,FadeInOutWhite = 2 |
closeEyeDuration | 闭眼转场时长 | 转场遮罩或闭眼效果的持续时间,用于控制 Act 切换时视觉过渡的节奏。 | 数值,单位为秒;示例值:2 |
duration | Act 时长 | 当前 Act 的预计体验时长。编辑器中以 Act Duration(s) 形式呈现,可用于内容节奏、校验、导出或运营侧排期参考。 | 数值,单位为秒;示例值:180 |
Plot Boundary
概述
Plot Boundary 对应运行程序集中的 YomovPlotBoundary,用于处理玩家与当前 Plot 边界之间的运行关系。它不是边界点配置组件,边界点仍来自 Act Unit 的 plotBoundary 和 bestViewAreaPoints;它也不是单纯的 Mesh 生成组件,具体网格生成会委托给 BoundaryGenerator 或 Boundary_Plot 资源上的生成逻辑。
在运行时,Plot Boundary 负责围绕当前 Plot 名称和边界生成器建立检测与显示关系:判断玩家参考点是否进入或离开 Plot 边界,在需要时打开/关闭边界包围网格,并把进入/离开边界的结果转交给 Act/Plot 事件。内容方通常不直接手动配置该组件,而是通过 Act Unit 维护 Plot 边界数据,并确保项目中保留 Boundary_Plot 等 SDK 资源。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
_plotName | 当前 Plot 名称 | YomovPlotBoundary 内部记录的当前 Plot 标识,用于把边界检测结果关联回具体 Plot。 | string;通常来自当前 Act Unit.plotName |
_boundaryGenerator | 边界生成器引用 | 指向负责生成或控制边界网格的 BoundaryGenerator。Plot Boundary 通过它控制 Plot 边界的可视化表现。 | BoundaryGenerator 引用;运行时或资源中配置,未确认时需检查当前版本 Inspector |
cameraLocation | 边界检测参考位置 | 用于选择玩家边界检测的参考位置,例如以头显/相机位置或其他追踪点作为判断依据。具体枚举值未在可见 prefab 中序列化,需要以当前 DLL/Inspector 为准。 | YomovPlotBoundary.CameraLocation;枚举值需确认 |
PlayerInPlotBoundary | 玩家是否在 Plot 边界内 | 运行时状态属性,用于记录玩家当前是否处于 Plot 边界内,并驱动进入/离开边界的状态变化。 | bool;运行时状态 |
OnBoundaryEnter | 进入边界处理 | 玩家从边界外进入当前 Plot 边界时的处理入口,通常用于触发当前 Plot 的进入边界事件。 | 方法/回调;与 Act Unit.OnBoundaryEnter 配合使用 |
OnBoundaryExit | 离开边界处理 | 玩家从当前 Plot 边界内离开时的处理入口,通常用于触发当前 Plot 的离开边界事件和边界提示逻辑。 | 方法/回调;与 Act Unit.OnBoundaryExit 配合使用 |
SetEncircleMeshFilterEnabled | 设置包围网格显示 | 控制 Plot 边界包围网格是否启用。边界显示本体由 BoundaryGenerator.encircleMeshFilter 等字段承载。 | 方法;通常传入 true / false |
ExecuteDelayedDeactivation | 延迟关闭边界显示 | 用于延迟关闭边界显示的内部流程,避免边界提示在状态变化时立即消失或闪烁。 | 内部异步/延迟方法;具体延迟时间与当前运行实现相关 |
Boundary_Plot | Plot 边界资源 | SDK 提供的 Plot 级边界预制体资源,包含橙色边界网格、可选最佳观赏区域网格和 PlayerGuidePath 子对象,是 Plot Boundary 显示链路常用的资源形态。 | Prefab;路径:Runtime/Act/Resources/Plot/Boundary_Plot.prefab |
YomovActManager
概述
YomovActManager 是 YOMOV SDK Core 中负责 Act / Plot 运行调度的核心管理组件。它通常存在于初始化示例场景或核心运行对象上,用于承接游戏开始、暂停、恢复、跳转、加载 Act、加载 Plot、切换 Plot 等运行事件。
在内容接入中,YomovActManager 是连接内容时间线、场景加载和 Act Unit 数据的事件中心。内容方可以通过它暴露的 UnityEvent 将 SDK 的运行状态变化绑定到自定义逻辑,例如播放 Timeline、切换场景、更新 UI、加载上一个 Plot 或在 Plot 变化时同步业务状态。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
OnStartGame | 开始游戏事件 | 游戏或体验开始时触发。示例场景中可用于绑定 PlayableDirector.Play,驱动主 Timeline 开始播放。 | UnityEvent |
OnPauseGame | 暂停游戏事件 | 体验暂停时触发。适合绑定暂停 Timeline、冻结交互、关闭输入或进入暂停 UI 等逻辑。 | UnityEvent |
OnResumeGame | 恢复游戏事件 | 体验从暂停状态恢复时触发。适合恢复 Timeline、输入、音效或其他运行状态。 | UnityEvent |
OnSeek | 跳转事件 | 运行进度被跳转或定位时触发。可用于同步 Timeline 时间、刷新当前 Plot 状态或重建运行上下文。 | UnityEvent |
OnSetPlayerHeight | 设置玩家高度事件 | 玩家高度或视角高度需要设置时触发。适合绑定角色 Rig、相机高度或初始化校准逻辑。 | UnityEvent |
OnLoadPlot | 加载 Plot 事件 | SDK 加载当前 Plot 时触发。内容方可在此绑定 Plot 初始化、机关启用、音画资源切换等逻辑。 | UnityEvent |
OnLoadAct | 加载 Act 事件 | SDK 加载某个 Act 时触发。适合绑定 Act 级资源初始化、章节状态切换或大段内容准备逻辑。 | UnityEvent |
OnUnloadAct | 卸载 Act 事件 | 当前 Act 被卸载或退出时触发。适合释放资源、关闭旧章节对象或清理状态。 | UnityEvent |
OnBeforeLoadScene | 场景加载前事件 | 新场景加载前触发。可用于做过场、保存状态、关闭交互或准备场景切换。 | UnityEvent |
OnLoadLastPlot | 加载上一个 Plot 事件 | 需要回退或恢复到上一个 Plot 时触发。适合绑定回退流程、恢复状态或调试回放逻辑。 | UnityEvent |
OnSwitchActAndPlot | 切换 Act 与 Plot 事件 | Act 与 Plot 同时发生切换时触发。适合处理跨章节、跨 Plot 的复合切换逻辑。 | UnityEvent |
OnChangePlotEvent | Plot 变化事件 | 当前 Plot 发生变化时触发。适合通知 UI、日志、状态机、多人同步或内容侧业务系统刷新当前 Plot。 | UnityEvent |
YomovPlotTransition
概述
YomovPlotTransition 是 YOMOV SDK Core 中用于响应 Timeline Signal 并推进 Plot 切换的组件。示例场景中,它通常作为 SignalReceiver 的事件目标存在,当时间线播放到 YomovPlotTransition 信号点时,调用 LoadNextPlot 进入下一个 Plot。
该组件自身在示例场景中未发现自定义序列化字段,重点配置发生在 Timeline 与 SignalReceiver 的绑定关系上。内容方需要确保 YomovPlotTransition.signal 被放置在正确的 Timeline 时间点,并将对应事件绑定到 YomovPlotTransition.LoadNextPlot。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
LoadNextPlot | 加载下一个 Plot | YomovPlotTransition 对外暴露的 Plot 切换方法。示例场景中由 SignalReceiver 在收到 YomovPlotTransition 信号后调用。 | method,无参数;示例绑定方法名:LoadNextPlot |
YomovPlotTransition.signal | Plot 切换信号 | Timeline 上使用的 Signal Asset,用于标记需要触发 Plot 切换的时间点。 | SignalAsset;路径:Runtime/Act/TimelineSingnal/YomovPlotTransition.signal |
m_Signals | 信号监听列表 | SignalReceiver 中监听的 Signal 列表。示例中包含 YomovPlotTransition.signal,其资源 GUID 为 5326778191f451e4d9256501a6ee5096。 | SignalAsset[] |
m_Events | 信号事件映射 | SignalReceiver 中与信号对应的事件列表。用于把 Timeline 信号映射到目标组件方法。 | UnityEvent[] |
m_TargetAssemblyTypeName | 目标组件类型 | 持久化事件调用的目标组件类型。示例中可见旧接入形态 YomovPlotTransition, Assembly-CSharp,也可见包内类型 Yomov.YomovPlotTransition, Yomov.Core。 | string |
m_MethodName | 目标方法名 | 持久化事件调用的方法名。用于指定收到 Signal 后调用 YomovPlotTransition 的哪个方法。 | string,固定示例:LoadNextPlot |
空间与安全边界
YomovRealBoundary
概述
YomovRealBoundary 是 YOMOV SDK Core 中用于表示真实场地边界的运行时组件。它通常随 Boundary_Real 或 Boundary_Real_Barrier 资源一起使用,用于把 LBE 场地的真实安全边界转化为 Unity 场景中的可视化边界、碰撞/层级筛选对象或运行时安全提示对象。
在空间与安全边界流程中,YomovRealBoundary 与 BoundaryGenerator、边界网格、Unity Layer 设置配合工作,用于区分真实场地边界与 Plot 体验边界。内容方通常不需要从零创建该组件,而是基于 SDK 提供的真实边界 prefab 进行引用、替换或调试;如需调整边界形状,应优先确认场地标定数据、边界网格来源和运行时生成逻辑。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
YomovRealBoundary | 真实边界组件 | 真实场地边界的运行时组件类型。示例资源中该组件本体未暴露独立序列化字段,具体运行逻辑由 Yomov.Core.dll 内部提供。 | MonoBehaviour;公开字段需确认 |
Boundary_Real | 真实边界资源 | SDK_Core 中的默认真实边界 prefab,用于承载真实边界对象和边界生成配置。 | Prefab,路径:Runtime/Act/Resources/Boundary_Real.prefab |
Boundary_Real_Barrier | 带阻挡真实边界资源 | 真实边界的阻挡版本资源,用于需要边界阻挡或更强安全隔离表现的场景。 | Prefab,路径:Runtime/Act/Resources/Boundary_Real_Barrier.prefab |
encircleMeshFilter | 真实边界网格 | 真实边界资源中用于承载边界包围形状的 MeshFilter,是真实边界可视化和空间范围表达的主要载体。 | MeshFilter 引用;示例资源指向子对象 Real |
meshHeight | 边界高度 | 控制真实边界网格的垂直显示高度,使边界在 LBE 空间中形成可感知的围挡高度。 | float;真实边界示例值:3 |
isPlotBoundary | 是否为 Plot 边界 | 标记当前边界是否属于 Plot 体验边界。真实边界资源中该值关闭,用于与 Plot 边界逻辑区分。 | bool;真实边界示例值:false / 0 |
layerName | 层级名称 | 配套层级设置字段,用于把真实边界子对象设置到指定 Unity Layer,便于边界渲染、碰撞、射线或运行时筛选逻辑统一处理。 | string;示例:Boundary |
includeChildren | 包含子节点 | 配套层级设置字段,决定设置 Layer 时是否递归应用到子对象。真实边界资源中的子对象已单独设置边界层级,因此示例值为关闭。 | bool;示例:false / 0 |
BoundaryGenerator
概述
BoundaryGenerator 是边界网格生成与显示控制组件,用于把边界点、凸包结果和引导对象转化为实际可渲染的 Unity 网格。它同时服务于真实边界资源和 Plot Boundary 资源:真实边界中用于生成/承载场地安全边界,Plot 边界中用于生成体验片段的边界范围、最佳观赏区域和玩家引导表现。
该组件通常挂在 Boundary_Real、Boundary_Real_Barrier 或 Boundary_Plot prefab 根节点上。开发者配置时应重点检查 encircleMeshFilter、meshHeight、isPlotBoundary 以及可选的 guideObj、PlayerGuidePath 引用,避免真实场地边界和 Plot 边界使用错误的高度、层级或边界类型标记。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
bestViewAreaMeshFilter | 最佳观赏区域网格 | 用于承载最佳观赏区域的 MeshFilter。Plot 边界可通过该网格绘制推荐站位或主要观看范围;真实边界资源中通常为空。 | MeshFilter 引用;可为 None |
encircleMeshFilter | 边界包围网格 | 用于承载边界包围形状的 MeshFilter。组件根据边界点或凸包结果生成/更新该网格,用于空间边界显示和范围提示。 | MeshFilter 引用 |
meshHeight | 边界网格高度 | 控制边界网格的垂直高度。真实场地边界通常需要较高围挡表现,Plot 边界通常使用较低高度贴近地面提示。 | float;示例:真实边界 3,Plot 边界 0.25 |
guideObj | 引导对象 | 用于承载方向引导或目标提示的对象引用。Plot 边界中可与引导点配合,提示玩家返回当前 Plot 或进入推荐区域;真实边界资源中通常为空。 | GameObject / Transform 引用;可为 None |
PlayerGuidePath | 玩家引导路径 | 用于承载玩家路径引导表现的对象引用,可配合 PlayerGuidePath prefab 显示从玩家当前位置到目标点的路径提示。 | GameObject 引用;示例资源中可为空 |
convexHull | 凸包点集合 | 保存或承接边界凸包点集合,用于边界网格生成、边界范围判断或空间提示计算。 | Vector3[] / List<Vector3>;示例初始值为空数组 |
isPlotBoundary | 是否为 Plot 边界 | 标记当前边界对象是否用于 Plot 级边界。该字段是区分真实场地边界与 Plot 体验边界的关键配置。 | bool;真实边界:false,Plot 边界:true |
ComputeConvexHull | 计算凸包 | 边界生成相关运行接口,用于根据边界点计算凸包结果。该符号可在 Core DLL 中确认,具体调用方式以 SDK 暴露 API 为准。 | Method / API;调用权限需确认 |
GeneratorBestViewArea | 生成最佳观赏区域 | 边界生成相关运行接口,用于生成最佳观赏区域网格或相关显示数据。通常与 bestViewAreaMeshFilter 配合。 | Method / API;调用权限需确认 |
SetBoundaryAlpha | 设置边界透明度 | 边界显示控制相关运行接口,用于调整边界可视化透明度,便于运行时根据玩家位置或流程状态弱化/强调边界提示。 | Method / API;参数与调用权限需确认 |
SetGuideEnabled | 设置引导显示 | 边界引导显示开关相关运行接口,用于控制普通引导对象是否启用。 | Method / API;参数与调用权限需确认 |
SetPlayerGuidePathEnabled | 设置玩家引导路径显示 | 玩家路径引导显示开关相关运行接口,用于控制路径引导对象是否启用。 | Method / API;参数与调用权限需确认 |
SetBestViewEnabled | 设置最佳观赏区域显示 | 最佳观赏区域显示开关相关运行接口,用于控制推荐观赏区域是否显示。 | Method / API;参数与调用权限需确认 |
PlayerGuidePath
概述
PlayerGuidePath 是玩家路径引导组件,用于在边界或 Plot 引导流程中显示从玩家当前位置到目标点、引导点或安全区域的路径提示。它在 SDK_Core 中以 Runtime/Act/PlayerGuidePath/PlayerGuidePath.prefab 形式提供,根节点包含路径组件,子节点 Line 使用 LineRenderer 承载实际路径线显示。
在空间安全体验中,PlayerGuidePath 通常由边界生成或 Plot 引导逻辑引用,用于帮助玩家从越界、偏离推荐区域或需要移动到目标点的状态中回到正确体验路径。开发者配置时应确认 line 引用没有丢失,并保持 prefab 的 Void 层级设置,以免路径提示被错误碰撞、遮挡或参与不必要的边界筛选。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
line | 路径线对象 | 组件持有的路径线引用,用于把路径点绘制成可视化引导线。示例 prefab 中该字段指向子对象 Line 的 LineRenderer。 | LineRenderer 引用 |
m_Name | 资源名称 | Unity prefab 根对象名称,用于在资源、层级和运行时实例中识别玩家引导路径对象。 | string;示例:PlayerGuidePath |
m_Layer | Unity Layer | Unity 对象层级编号。示例资源根节点和 Line 子节点均位于路径提示使用的层级,便于渲染和交互筛选。 | int;示例:27 |
layerName | 层级名称 | 配套层级设置字段,用于把玩家路径引导对象设置到指定 Unity Layer,避免路径提示被边界碰撞或其他空间筛选逻辑误处理。 | string;示例:Void |
includeChildren | 包含子节点 | 配套层级设置字段,决定设置 Layer 时是否递归应用到子对象。路径线在子节点上,因此示例中需要递归包含子节点。 | bool;示例:true / 1 |
m_UseWorldSpace | 使用世界坐标 | LineRenderer 的坐标空间设置。示例中关闭世界坐标,表示路径线顶点按对象本地空间解释。 | bool;示例:false / 0 |
m_Loop | 是否闭合路径 | LineRenderer 的闭合设置。路径引导通常表现为从玩家到目标点的开放路径,因此示例中关闭闭合。 | bool;示例:false / 0 |
运行与设备初始化
XRSDKInit
概述
XRSDKInit 是 YOMOV SDK Core 中负责 XR 运行初始化的入口组件。它通常挂在 VoidCommon 或 CustomYomovLBE 这类 SDK 根 prefab 上,启动时识别当前头显设备类型,按设备类型处理 OpenXR Feature,启动 XR Loader、XR 子系统和手势追踪子系统,并在初始化完成后激活 VRRig。
该组件处在内容运行流程的早期阶段,脚本执行顺序配置为 -6000。内容方需要重点确认 vrRig 与 xrOrigin 引用是否正确;如果未手动绑定 vrRig,组件会尝试从 Resources/VRRig 加载默认资源。设备识别目前基于 SystemInfo.deviceModel 字符串判断,支持 Pico、YVR / Play For Dream、VIVE / HTC、Meta / Quest 等类型。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
vrRig | VR Rig 引用 | 组件持有的 VRRig Transform 引用。初始化时先关闭该对象,OpenXR/设备初始化完成后再激活,用于承载 XROrigin、XR Interaction Manager、输入和手部追踪相关对象。 | Transform;[SerializeField];示例 prefab 中指向子节点 VRRig |
vrRigPath | 默认 VRRig 资源路径 | 当 vrRig 未绑定时,用于从 Resources 加载默认 VRRig prefab 并实例化到当前初始化对象下。 | string;默认值:VRRig |
HeadsetType | 头显类型枚举 | 用于记录当前运行设备类型,并驱动 OpenXR Feature 的启停判断。 | enum:None、Pico、YVR、VIVE、Meta |
headsetType | 当前头显类型 | 静态运行状态,保存 LoadConfig 根据设备型号识别出的头显类型,供初始化流程和外部判断方法读取。 | static HeadsetType;默认值:HeadsetType.None;只读公开访问 |
xrOrigin | XR 原点引用 | OpenXR 模式下使用的 XROrigin 引用。初始化后会通过它切换追踪原点模式,确保玩家空间坐标从设备模式切换到地面模式。 | XROrigin;在 YOMOV_OPENXR && YOMOV_XR_HANDS 下生效;示例可为空或指向 VRRig/XROrigin |
Awake | 唤醒初始化 | 初始化阶段加载或绑定 VRRig,将其暂时关闭,并调用设备识别逻辑。 | Unity lifecycle;自动调用 |
Start | 启动流程 | 启动 XR 初始化协程。完整 OpenXR 条件下进入 InitializeXR,无 XR 包时进入简化初始化流程。 | Unity lifecycle;自动调用 |
LoadConfig | 加载设备配置 | 根据 SystemInfo.deviceModel 判断当前设备所属头显类型,并更新 headsetType。 | private method;匹配关键词:Pico、YVR、Play For Dream、HTC、VIVE、Meta、Quest |
InitializeXR | XR 初始化协程 | 在非 Editor 且识别到有效头显时初始化 OpenXR;随后激活 VRRig,等待一帧后检查 XRComponentManager.Instance 是否可用,并启动追踪原点切换流程。 | IEnumerator;内部协程 |
EnsureXRStarted | 确保 XR 启动 | 通过 XRGeneralSettings.Instance.Manager 初始化 XR Loader、启动 XR Subsystems,并调用手势追踪初始化流程。 | IEnumerator;依赖 XR Management |
ListAllFeatures | 枚举 OpenXR Feature | 读取当前 OpenXRSettings 中的 Features,并根据设备类型关闭不匹配的厂商 Feature,降低多设备 OpenXR 配置冲突风险。 | private method;PICO / VIVE / META 类型按类名关键词识别 |
InitializeHandTracking | 初始化手势追踪 | 获取所有 XRHandSubsystem,并启动尚未运行的手势追踪子系统。 | IEnumerator;依赖 XR Hands |
changeTrackingOriginMode | 切换追踪原点模式 | 先将 XROrigin.RequestedTrackingOriginMode 设置为 Device,等待帧末后再设置为 Floor,用于刷新地面空间定位。 | IEnumerator;内部协程 |
SetXROrginBind | 绑定 XR 原点 | 外部可调用的绑定方法,从传入 Transform 上获取 XROrigin 组件并赋给 xrOrigin。 | public void SetXROrginBind(Transform _XROrginTransform) |
IsHeadsetType | 判断头显类型 | 外部可调用的静态判断方法,用于检查当前识别出的 headsetType 是否等于指定类型。 | public static bool IsHeadsetType(HeadsetType type) |
executionOrder | 脚本执行顺序 | Unity 脚本导入设置中的执行顺序,保证该初始化组件尽早运行。 | int;示例:-6000 |
XRComponentManager
概述
XRComponentManager 是 YOMOV SDK Core 中的 XR 组件统一管理器,用于在 VRRig 激活后收集和缓存 XR 运行所需的核心引用,包括 XROrigin、XRInputModalityManager、左右手追踪组件、左右手骨骼驱动、传送射线交互器等。它通常与 XRSDKInit 挂在同一个 SDK 根 prefab 上,由 XRSDKInit 在初始化后检查其单例是否可用。
该组件为其他运行模块提供统一查询入口,降低业务脚本直接依赖 Unity XR 层级结构的成本。例如 Creator 的回放手部逻辑会通过 XRComponentManager.Instance 获取左右手 XRHandTrackingEvents,避免全局查找时误绑远端或示例手模型。若项目未安装 XR Hands / XR Toolkit 相关包,源码中提供了 Stub 实现,方法返回默认值以保证编译通过。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
Instance | 单例实例 | 全局访问入口。首次读取时会在场景中查找 XRComponentManager,未找到时输出错误或返回空。 | static XRComponentManager |
leftHandTracking | 左手追踪组件 | 缓存左手 XRHandTrackingEvents,用于判断左手是否被追踪,以及向其他模块提供左手追踪事件源。 | XRHandTrackingEvents;内部字段 |
rightHandTracking | 右手追踪组件 | 缓存右手 XRHandTrackingEvents,用于判断右手是否被追踪,以及向其他模块提供右手追踪事件源。 | XRHandTrackingEvents;内部字段 |
leftHandSkeletonDriver | 左手骨骼驱动 | 缓存左手 XRHandSkeletonDriver,用于获取左手根节点 Transform 或在回放模式下关闭实时手部驱动。 | XRHandSkeletonDriver;内部字段 |
rightHandSkeletonDriver | 右手骨骼驱动 | 缓存右手 XRHandSkeletonDriver,用于获取右手根节点 Transform 或在回放模式下关闭实时手部驱动。 | XRHandSkeletonDriver;内部字段 |
inputModalityManager | 输入模态管理器 | 缓存 XRInputModalityManager,用于识别当前是手柄模式还是手势追踪模式,并注册输入模式切换事件。 | XRInputModalityManager;内部字段 |
xrOrigin | XR 原点 | 缓存 XROrigin,用于提供玩家 XR 根节点和 Camera 的查询能力。 | XROrigin;内部字段 |
teleportRayInteractor | 传送射线交互器 | 缓存名称包含 Teleport 或 Layer 为 Teleport 的 XRRayInteractor,用于传送射线相关运行逻辑。 | XRRayInteractor;内部字段 |
InputModalityManager | 输入模态访问器 | 对外公开当前缓存的输入模态管理器。 | XRInputModalityManager;只读属性 |
XROrigin | XR 原点访问器 | 对外公开当前缓存的 XROrigin。 | XROrigin;只读属性 |
TeleportRayInteractor | 传送射线访问器 | 对外公开当前缓存的传送射线交互器。 | XRRayInteractor;只读属性 |
IsLeftHandTracked | 左手是否追踪 | 读取左手追踪组件的 handIsTracked 状态,用于运行逻辑判断左手是否有效。 | bool;只读属性 |
IsRightHandTracked | 右手是否追踪 | 读取右手追踪组件的 handIsTracked 状态,用于运行逻辑判断右手是否有效。 | bool;只读属性 |
IsMotionControllerMode | 是否手柄模式 | 判断当前输入模态是否为 MotionController。 | bool;只读属性 |
IsHandTrackingMode | 是否手势模式 | 判断当前输入模态是否为 TrackedHand。 | bool;只读属性 |
InitializeComponents | 初始化 XR 组件引用 | 在 Awake 中执行,遍历子节点收集左右手追踪、输入模态、XROrigin 和传送射线引用,并在回放模式下关闭实时 XR 输入链路。 | private method;自动调用 |
RefreshComponents | 刷新组件引用 | 外部可调用的手动刷新入口,用于运行时动态创建或替换 XR 子对象后重新收集组件引用。 | public void RefreshComponents() |
IsHandTracked | 查询单手追踪状态 | 根据传入布尔值返回左手或右手是否处于追踪状态。 | public bool IsHandTracked(bool isLeftHand) |
GetHandRootTransform | 获取手部根节点 | 优先返回对应手部 XRHandSkeletonDriver.rootTransform;若骨骼驱动不存在,则回退返回 XRHandTrackingEvents.transform。 | public Transform GetHandRootTransform(bool isLeftHand) |
GetHandTrackingEvents | 获取手部追踪事件 | 返回左手或右手的 XRHandTrackingEvents,供录制、回放或自定义交互逻辑绑定本地手部输入源。 | public XRHandTrackingEvents GetHandTrackingEvents(bool isLeftHand) |
RegisterMotionControllerModeStarted | 注册手柄模式事件 | 向 XRInputModalityManager.motionControllerModeStarted 注册回调。 | public void;参数:UnityAction callback |
RegisterHandTrackingModeStarted | 注册手势模式事件 | 向 XRInputModalityManager.trackedHandModeStarted 注册回调。 | public void;参数:UnityAction callback |
UnregisterMotionControllerModeStarted | 取消手柄模式事件 | 从 motionControllerModeStarted 移除已注册回调,避免对象销毁后残留监听。 | public void;参数:UnityAction callback |
UnregisterHandTrackingModeStarted | 取消手势模式事件 | 从 trackedHandModeStarted 移除已注册回调,避免对象销毁后残留监听。 | public void;参数:UnityAction callback |
GetInputModalityTransforms | 获取输入模态节点 | 输出左右手、左右手柄 Transform,供自定义空间管理或角色绑定逻辑使用。 | public bool;out Transform x4 |
GetXROriginAndCamera | 获取 XR 原点与相机 | 输出 XROrigin Transform 和 Camera Transform,用于需要定位玩家头部或 XR 根节点的运行逻辑。 | public bool;out Transform xrOriginTransform、out Transform cameraTransform |
GetLocomotionProviders | 获取移动提供器 | 在 LocomotionMediator 子集中查找名为 Turn 与 Move 的对象,并输出对应 Transform。 | public bool;out Transform x2 |
GetHandRootBones | 获取左右手 RootBone | 从左右手对象的 SkinnedMeshRenderer 中查找有效 rootBone,用于手部模型或回放骨骼绑定。 | public bool;out Transform leftHandRootBone、out Transform rightHandRootBone |
EnsureInputActionAsset | 确保输入动作资产 | 编辑器辅助方法,确保 VRRig 下的 InputActionManager 包含指定的 InputActionAsset。 | public bool;默认资源路径:XRISetting/CMP XRI Default Input Actions |
EnsureXRInteractionManager | 确保 XR 交互管理器 | 编辑器辅助方法,检查 VRRig 下是否已有 XRInteractionManager,不存在时创建。 | public GameObject;仅编辑器使用说明见源码注释 |
EnsureEventSystem | 确保事件系统 | 编辑器辅助方法,检查 VRRig 下是否已有 XRUIInputModule,不存在时创建包含 EventSystem 与 XRUIInputModule 的对象。 | public GameObject;仅编辑器使用说明见源码注释 |
DisableLiveXRInputsForReplay | 回放模式禁用实时 XR 输入 | 当 Resources/ConfigData 中检测到 isReplay 为 true 时,禁用 XRInputModalityManager、InputActionManager 和手部追踪链路,避免实时输入干扰回放数据。 | private method;运行时内部逻辑 |
YOMOV_XR_HANDS && YOMOV_XR_TOOLKIT | 完整实现编译条件 | 只有定义相关 XR Hands 与 XR Toolkit 条件时,组件使用完整实现;否则进入 Stub 实现。 | scripting define symbols |
说明:以上字段和方法来源于 YOMOVSDK_Core/Scripts/Runtime/Core/OpenXR 下的源码,以及 VoidCommon.prefab、CustomYomovLBE.prefab、VRRig.prefab 中的序列化引用。示例 prefab 的引用值仅代表 SDK 默认资源配置,不等同于所有内容项目的固定值。
多人同步
YomovServerManager
概述
YomovServerManager 是 SDK_Creator 多人同步链路中的服务端管理组件,通常由服务器初始化场景或 Resources/Network/YomovServerManager 预制体承载。它基于 FishNet 网络栈组织服务端连接、玩家/手部/手指同步对象生成、队伍数据同步、内容控制请求、进度保存和异常踢出等运行逻辑。
内容开发者通常不需要直接改写该组件代码,但需要确保服务器场景中使用正确的预制体、端口、可生成网络预制体集合和玩家同步预制体引用。该组件的业务实现主要位于 Creator 编译程序集内,以下字段优先来自 SDK 示例 prefab 与可确认的方法符号;未能从源码确认的语义以“需确认”标注。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
_spawnablePrefabs | 可生成预制体集合 | 提供 FishNet 运行时可 Spawn 的网络预制体注册表,服务端生成玩家、手部和手指同步对象时依赖该集合。 | SpawnablePrefabs 资源引用;示例资源已配置 NetworkSync 相关 prefab。 |
_playerPrefab | 玩家同步预制体 | 服务端用于生成玩家网络对象,通常挂载 PlayerSync,用于同步玩家身份、队伍、昵称、Avatar 资源和身体姿态。 | FishNetPlayer prefab。 |
_HandsPrefab | 手部同步预制体 | 服务端用于生成双手位姿同步对象,通常挂载 HandsSync。 | FishNetHands prefab。 |
_FingerPrefab | 手指同步预制体 | 服务端用于生成手指骨骼同步对象,通常挂载 FingersSync。 | FishNetFingers prefab。 |
_addToDefaultScene | 加入默认网络场景 | 控制网络对象或管理器是否加入默认场景管理流程,影响 FishNet 场景内对象注册与同步。 | Boolean;示例值:1。 |
_port | 服务端端口 | 网络传输监听端口,客户端需要使用相同端口连接服务器。 | ushort;示例值:11336。 |
_maximumClients | 最大客户端数量 | 限制服务端可接受的客户端连接数量。 | int;示例值:4095。 |
_clientAddress | 客户端连接地址 | 同一网络配置在本地测试或客户端连接时使用的默认地址。 | string;示例值:localhost。 |
_timeout | 连接超时时间 | 用于控制连接建立或传输等待的超时阈值。 | float/int;示例值:15,单位需结合 FishNet 版本确认。 |
_remoteClientTimeout | 远端客户端超时模式 | 用于 FishNet/Tugboat 对远端客户端超时检测的配置。 | 枚举或数值配置;示例值:2,具体语义需确认。 |
_remoteClientTimeoutDuration | 远端客户端超时时长 | 远端客户端超过该时长未响应时,可触发连接超时处理。 | 数值;示例值:20。 |
_syncTypeRate | 同步类型刷新间隔 | 用于网络同步层控制部分同步类型的发送或刷新节奏。 | float;示例值:0.1。 |
_startOnHeadless | Headless 自动启动 | 控制在无图形界面服务器模式下是否自动启动连接。 | Boolean;示例值:0。 |
playerPrefab | 业务玩家预制体 | YOMOV 业务层持有的玩家同步 prefab 引用,用于服务器创建玩家同步实体。 | FishNetPlayer prefab。 |
handPrefab | 业务手部预制体 | YOMOV 业务层持有的手部同步 prefab 引用,用于服务器创建手部同步实体。 | FishNetHands prefab。 |
_TestSendCommand | 测试发送指令 | 用于多人同步调试或内部测试链路的命令配置。 | int;示例值:5,业务含义需确认。 |
ClientType | 网络端类型 | 标识当前管理器以服务端身份运行,供共享网络逻辑区分 Server/Client。 | ClientType;示例值:0,对应 Server。 |
YomovNetClientManager
概述
YomovNetClientManager 是 SDK_Creator 多人同步链路中的客户端管理组件,负责客户端连接服务器、发送登录信息、在登录通过后启动内容流程,并响应播控、加载场景、保存进度和玩家数据等来自服务端或平台侧的运行事件。
运行类名可在 Yomov.Creator.dll 中确认为 YomovNetClientManager;SDK 中对应的预制体资源当前命名为 YomovClientManager,并在 ConnectComponents 中作为连接组件引用。内容项目需要保证该客户端管理器与服务端端口、地址、SpawnablePrefabs 和 ClientType 配置一致,否则多人同步对象生成和登录后流程可能无法闭环。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
_spawnablePrefabs | 可生成预制体集合 | 注册客户端可识别的 FishNet 网络预制体。需要与服务端保持一致,保证 PlayerSync、HandsSync、FingersSync 等对象能正确反序列化和生成。 | SpawnablePrefabs 资源引用。 |
_port | 连接端口 | 客户端连接服务端时使用的端口,需要与 YomovServerManager 的 _port 一致。 | ushort;示例值:11336。 |
_maximumClients | 最大客户端数量 | 来自共享网络配置的连接上限字段;在客户端侧通常用于保持与网络管理器配置一致。 | int;示例值:4095。 |
_clientAddress | 连接地址 | 客户端默认连接的服务端地址,本地联调时通常为 localhost,场馆或真机环境应切换为实际服务器地址。 | string;示例值:localhost。 |
_timeout | 连接超时时间 | 客户端连接服务器时的超时阈值。 | float/int;示例值:15,单位需结合 FishNet 版本确认。 |
ClientType | 网络端类型 | 标识当前管理器以客户端身份运行,供共享网络逻辑区分 Server/Client。 | ClientType;示例值:1,对应 Client。 |
ConnectAsync | 异步连接 | 发起客户端到服务端的网络连接流程,通常在初始化或进入多人内容前调用。 | 异步 API;参数签名需以当前 Creator DLL 为准。 |
SendLoginInfoAsync | 发送登录信息 | 连接建立后向服务端发送玩家、内容、队伍等登录相关信息,用于服务端鉴权和同步对象创建。 | 异步 API;参数签名需确认。 |
StartGameAfterLogin | 登录后启动游戏 | 登录成功后触发内容运行或进入正式多人同步流程。 | 方法;触发条件来自登录结果。 |
OnContentControlEvent | 内容控制事件处理 | 处理播控或服务端下发的内容控制事件,例如开始、停止、切换或其他内容运行指令。 | 方法;事件类型需结合服务端协议确认。 |
HandleValidateFailed | 校验失败处理 | 处理登录、鉴权或数据校验失败后的客户端降级、退出或提示逻辑。 | 方法;失败原因枚举需确认。 |
SaveProgressAsync | 保存进度 | 客户端向服务端或平台侧请求保存队伍/内容进度。 | 异步 API;参数签名需确认。 |
SavePlayerDataAsync | 保存玩家数据 | 客户端请求保存玩家维度的数据,例如玩家状态、结果或运行中记录。 | 异步 API;参数签名需确认。 |
RequestLoadSceneAsync | 请求加载场景 | 客户端向服务端或管理层请求加载指定场景,用于多人内容中的统一场景切换。 | 异步 API;场景标识参数需确认。 |
RegisterBeforeLoadSceneTask | 注册加载场景前任务 | 注册场景加载前需要完成的异步任务,便于在切换场景前完成保存、卸载、清理或准备逻辑。 | 方法;任务类型需确认。 |
PlayerSync
概述
PlayerSync 是玩家主体的网络同步组件,挂载在 FishNetPlayer 预制体上,继承 TeamNetBehaviour 并实现 IPlayerSync。它负责在多人内容中同步玩家所属队伍、玩家 ID、内容 ID、昵称、Avatar 资源名、皮肤资源名以及头部/身体位姿数据。
该组件只承担网络数据传输和变化事件分发,不直接决定业务表现。业务层通过 ShouldCreateAvatar、ShouldSyncBodyData、GetBodySyncData 等委托把本地 Avatar 创建条件和身体同步数据注入进来;在 FishNet 启用时,同步频率受 FishNetConfig.AvatarSyncTime 控制。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
sameTeamDistance | 同队同步距离 | 继承自 TeamNetBehaviour,用于 TeamCondition 配置同队对象的网络可见或同步距离。 | float;FishNetPlayer 示例值:9999。 |
otherTeamDistance | 非同队同步距离 | 继承自 TeamNetBehaviour,用于限制非同队对象的网络可见或同步距离。 | float;FishNetPlayer 示例值:5。 |
teamId | 队伍 ID | 玩家所属队伍标识。变化时触发 OnTeamIdChange,并通过 OnTeamIdChangedEvent 通知业务层。 | long;SyncVar;默认值 0。 |
avatarResourceName | Avatar 资源名称 | 玩家 Avatar 基础资源名,用于业务层创建或识别玩家 Avatar。 | string;SyncVar;默认空字符串。 |
avatarSkinResourceName | Avatar 皮肤资源名称 | 玩家 Avatar 皮肤资源名。变化时可触发业务层重新创建或刷新 Avatar 皮肤。 | string;SyncVar;默认空字符串。 |
playerOriginId | 玩家原始 ID | 记录平台或内容侧的玩家原始标识,用于跨系统识别玩家。 | long;SyncVar;默认值 0。 |
nickname | 玩家昵称 | 玩家展示昵称。变化时组件会同步更新 GameObject 名称,并触发昵称变化事件。 | string;SyncVar;默认空字符串。 |
contentId | 内容 ID | 记录玩家当前所属内容标识,用于服务端和平台侧关联内容运行数据。 | long;SyncVar;默认值 0。 |
multiBodySyncData | 身体同步数据 | 同步玩家身体关键点数据,供远端 Avatar 表现层刷新位置、朝向和身体缩放等状态。 | VRAvatar.MultiBodySyncData;包含 RootPoint、HeadPoint、syncPointState、BodyScale 等字段。 |
ShouldCreateAvatar | 是否创建 Avatar 委托 | 业务层注入的判断函数,用于在皮肤资源变化等场景中决定是否创建或刷新 Avatar。 | Func<bool>;可为空。 |
ShouldSyncBodyData | 是否同步身体数据委托 | 业务层注入的判断函数,用于控制本地拥有者是否持续上传身体同步数据。 | Func<bool>;可为空。 |
GetBodySyncData | 获取身体同步数据委托 | 业务层注入的数据提供函数,组件按 FishNetConfig.AvatarSyncTime 节奏读取并通过 ServerRpc 同步。 | Func<VRAvatar.MultiBodySyncData>;可为空。 |
GetLocalPlayerPosition | 获取本地玩家位置委托 | 业务层注入的本地玩家位置获取函数,可用于同步条件、距离判断或外部逻辑读取。 | Func<Vector3>;可为空。 |
SetPlayerData | 设置玩家数据 | 客户端请求服务端设置队伍、玩家 ID、内容 ID、昵称、Avatar 资源和皮肤资源,并将 NetworkObject 加入对应队伍。 | ServerRpc;参数为 teamId、playerOriginId、contentId、nickname、avatarResourceName、avatarSkinResourceName。 |
ServerSetPlayerData | 服务端设置玩家数据 | 仅服务端直接写入玩家身份与资源数据,适用于服务端创建或修正玩家同步状态。 | public 方法;非服务端调用会被拦截。 |
SetAvatarSkinResourceName | 设置 Avatar 皮肤资源名 | 客户端请求服务端更新 Avatar 皮肤资源名,并同步到其他客户端。 | ServerRpc;参数 string skinName。 |
ServerSetMultiBodySyncData | 服务端设置身体同步数据 | 服务端直接写入 multiBodySyncData,供非客户端上传路径或服务端修正状态使用。 | public 方法;参数 VRAvatar.MultiBodySyncData。 |
OnStartClientEvent | 客户端启动事件 | OnStartClient 后触发,业务层可在网络对象客户端初始化完成后绑定表现逻辑。 | event Action。 |
OnDestroyEvent | 销毁事件 | 组件销毁时触发,业务层可清理 Avatar、监听器或缓存引用。 | event Action。 |
OnOwnerUpdateEvent | 拥有者更新事件 | 当本地客户端拥有该网络对象时,每帧 Update 触发,供业务层处理本地拥有者逻辑。 | event Action。 |
OnTeamIdChangedEvent | 队伍变化事件 | teamId 变化时通知业务层。 | event Action<long, long, bool>;参数 prev、next、asServer。 |
OnPlayerNickChangedEvent | 昵称变化事件 | nickname 变化时通知业务层。 | event Action<string, string, bool>;参数 prev、next、asServer。 |
OnAvatarSkinChangedEvent | Avatar 皮肤变化事件 | avatarSkinResourceName 变化且满足 ShouldCreateAvatar 条件时通知业务层。 | event Action<string, string, bool>;参数 prev、next、asServer。 |
OnBodySyncDataChangedEvent | 身体同步数据变化事件 | multiBodySyncData 变化时通知表现层刷新远端身体状态。 | event Action<VRAvatar.MultiBodySyncData, VRAvatar.MultiBodySyncData, bool>。 |
HandsSync
概述
HandsSync 是双手位姿的网络同步组件,挂载在 FishNetHands 预制体上,继承 TeamNetBehaviour 并实现 IHandsSync。它负责同步左右手的空间位置、旋转和追踪状态,供远端 Avatar 手部表现或交互表现使用。
该组件通过业务层注入的 ShouldSyncHandsData 和 GetHandsSyncDataFunc 控制是否上传手部数据,以及上传哪一份手部数据。FishNet 启用时,拥有者客户端按 FishNetConfig.AvatarSyncTime 的节奏向服务端同步,服务端再分发给其他客户端。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
sameTeamDistance | 同队同步距离 | 继承自 TeamNetBehaviour,用于配置同队玩家手部对象的网络可见或同步距离。 | float;FishNetHands 示例值:9999。 |
otherTeamDistance | 非同队同步距离 | 继承自 TeamNetBehaviour,用于限制非同队玩家手部对象的网络可见或同步距离。 | float;FishNetHands 示例值:3。 |
multiHandsSyncData | 双手同步数据 | 同步左右手关键点位姿和追踪状态。变化时通过 OnHandsSyncDataChangedEvent 通知业务层。 | VRAvatar.MultiHandsSyncData;包含 RightHandPoint、LeftHandPoint、LeftHandISTracking、RightHandISTracking。 |
_HandsData | 本地手部缓存数据 | 组件内部缓存本次准备上传的手部同步数据。 | VRAvatar.MultiHandsSyncData;内部字段。 |
_UpdateTime | 同步计时器 | 组件内部计时,用于按 FishNetConfig.AvatarSyncTime 控制手部数据上传频率。 | float;内部字段。 |
ShouldSyncHandsData | 是否同步手部数据委托 | 业务层注入的判断函数,用于控制本地拥有者是否持续上传手部同步数据。 | Func<bool>;可为空。 |
GetHandsSyncDataFunc | 获取手部同步数据委托 | 业务层注入的数据提供函数,组件按同步节奏读取并通过 ServerRpc 上传。 | Func<VRAvatar.MultiHandsSyncData>;可为空。 |
GetMultiHandsSyncData | 获取双手同步数据 | 向业务层提供当前已同步的双手位姿和追踪状态。 | public getter;返回 VRAvatar.MultiHandsSyncData。 |
ServerSetMultiHandsSyncData | 服务端设置双手同步数据 | 服务端直接写入 multiHandsSyncData,用于服务端修正或非客户端上传路径。 | public 方法;参数 VRAvatar.MultiHandsSyncData。 |
OnStartClientEvent | 客户端启动事件 | OnStartClient 后触发,业务层可在网络对象客户端初始化完成后绑定手部表现逻辑。 | event Action。 |
OnHandsSyncDataChangedEvent | 手部同步数据变化事件 | multiHandsSyncData 变化时通知业务层刷新远端手部位置、旋转和追踪显示。 | event Action<VRAvatar.MultiHandsSyncData, VRAvatar.MultiHandsSyncData, bool>。 |
FingersSync
概述
FingersSync 是手指骨骼姿态的网络同步组件,挂载在 FishNetFingers 预制体上,继承 TeamNetBehaviour 并实现 IFingersSync。它负责同步左右手五指的骨骼旋转数据,使远端客户端能够还原玩家手势或手部细节动作。
该组件与 HandsSync 分工不同:HandsSync 关注左右手整体位置、旋转和追踪状态,FingersSync 关注每根手指各关节的旋转数据。FishNet 启用时,SetSyncLeftHand 和 SetSyncRightHand 会通过 ServerRpc 更新 SyncVar,并以 FishNetConfig.AvatarSyncTime 作为发送节奏。
属性描述
英文名称 | 中文名称 | 功能描述 | 属性值 |
|---|---|---|---|
sameTeamDistance | 同队同步距离 | 继承自 TeamNetBehaviour,用于配置同队玩家手指对象的网络可见或同步距离。 | float;FishNetFingers 示例值:3。 |
otherTeamDistance | 非同队同步距离 | 继承自 TeamNetBehaviour,用于限制非同队玩家手指对象的网络可见或同步距离。 | float;FishNetFingers 示例值:0。 |
_syncLeftHand | 左手手指同步数据 | 左手五指骨骼旋转数据。变化时触发 OnLeftHandDataChange,并通过 OnLeftHandDataChangedEvent 通知业务层。 | FingersData;SyncVar;SendRate = FishNetConfig.AvatarSyncTime;示例初始各关节为 0。 |
_syncRightHand | 右手手指同步数据 | 右手五指骨骼旋转数据。变化时触发 OnRightHandDataChange,并通过 OnRightHandDataChangedEvent 通知业务层。 | FingersData;SyncVar;SendRate = FishNetConfig.AvatarSyncTime;示例初始各关节为 0。 |
FingersData.thumb | 拇指数据 | FingersData 中的拇指骨骼数据,用于描述拇指各关节旋转。 | Finger。 |
FingersData.index | 食指数据 | FingersData 中的食指骨骼数据,用于描述食指各关节旋转。 | Finger。 |
FingersData.middle | 中指数据 | FingersData 中的中指骨骼数据,用于描述中指各关节旋转。 | Finger。 |
FingersData.ring | 无名指数据 | FingersData 中的无名指骨骼数据,用于描述无名指各关节旋转。 | Finger。 |
FingersData.little | 小指数据 | FingersData 中的小指骨骼数据,用于描述小指各关节旋转。 | Finger。 |
Finger.metacarpal | 掌骨关节旋转 | 单根手指的 metacarpal 关节旋转数据。 | int;将欧拉角按每轴 10 bit 打包存储。 |
Finger.proximal | 近端关节旋转 | 单根手指的 proximal 关节旋转数据。 | int;将欧拉角按每轴 10 bit 打包存储。 |
Finger.intermediate | 中间关节旋转 | 单根手指的 intermediate 关节旋转数据。 | int;将欧拉角按每轴 10 bit 打包存储。 |
Finger.distal | 远端关节旋转 | 单根手指的 distal 关节旋转数据。 | int;将欧拉角按每轴 10 bit 打包存储。 |
cancellationTokenSource | 销毁取消令牌 | 用于兼容较低 Unity 版本的生命周期取消令牌。Awake 时创建,OnDestroy 时取消。 | CancellationTokenSource;public 字段。 |
destroyCancellationTokens | 销毁取消令牌数组 | IFingersSync 接口属性,用数组形式暴露 cancellationTokenSource,便于业务层统一管理异步任务取消。 | CancellationTokenSource[];接口属性。 |
GetSyncLeftHand | 获取左手手指数据 | 向业务层提供当前同步到的左手 FingersData。 | public getter;返回 FingersData。 |
GetSyncRightHand | 获取右手手指数据 | 向业务层提供当前同步到的右手 FingersData。 | public getter;返回 FingersData。 |
SetSyncLeftHand | 设置左手手指数据 | 客户端写入左手 FingersData;FishNet 启用时通过 ServerRpc 同步到服务端。 | public 方法;参数 FingersData。 |
SetSyncRightHand | 设置右手手指数据 | 客户端写入右手 FingersData;FishNet 启用时通过 ServerRpc 同步到服务端。 | public 方法;参数 FingersData。 |
OnStartClientEvent | 客户端启动事件 | OnStartClient 后触发,业务层可在网络对象客户端初始化完成后绑定手指表现逻辑。 | event Action。 |
OnDestroyEvent | 销毁事件 | OnDestroy 时触发,业务层可清理手势同步监听或异步任务。 | event Action。 |
OnLeftHandDataChangedEvent | 左手数据变化事件 | _syncLeftHand 变化时通知业务层刷新左手手势表现。 | event Action<FingersData, FingersData, bool>;参数 prev、next、asServer。 |
OnRightHandDataChangedEvent | 右手数据变化事件 | _syncRightHand 变化时通知业务层刷新右手手势表现。 | event Action<FingersData, FingersData, bool>;参数 prev、next、asServer。 |