跳到主要内容

核心组件

核心运行逻辑

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。