Core Components
Core LBE Runtime
Act Unit
Overview
Act Unit is the Act-level descriptor in YOMOV SDK Core and corresponds to YomovActDescriptor in the runtime assembly. It is normally attached to an Act root GameObject, with one or more Plot-level objects organized beneath that root.
The component stores the Act name, unique ID, Act boundary, Entrance Area, Core Experience Area, entrance and exit points, Act switch event, and transition settings. YomovActManager uses this data to organize the Act/Plot hierarchy, validate boundaries in the Editor, and export Act data.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
id | public field; hidden in Inspector | string | Unique Act ID initialized with a GUID. Do not reuse the same value when duplicating an Act. |
actName | public field | string | Stable name and runtime identifier for the Act. |
tutoringAct | public field | bool | Marks an Act used for tutorial or guidance flows. |
OnSwitchAct | public UnityEvent | UnityEvent<YomovActDescriptor> | Invoked with the active YomovActDescriptor when this Act is loaded. |
actAreaPoints | public field | List<Vector3> | Local-space polygon for the overall Act boundary. |
arrivalAreaPoints | public field | List<Vector3> | Local-space polygon for the Act Entrance Area. |
mainAreaPoints | public field | List<Vector3> | Local-space polygon for the Core Experience Area. |
EntrancePosition | public field | Vector3; default (-1.5, 0, -3) | Reference entrance position. |
EntranceRotation | public field | Vector3; default Vector3.zero | Reference entrance orientation in Euler angles. |
exitPoint | public field | Vector3; default (0, 0, 0) | Act exit guidance point in local space. |
isExitPointSet | public field; hidden in Inspector | bool; default false | Tool-maintained flag indicating whether exitPoint has been set. |
isCenterPointUpdated | public field; hidden in Inspector | bool; default false | Tool-maintained flag indicating whether the Act root was recentered. |
transitionEffect | public field | TransitionEffect; default FadeInOut | Transition effect used by the Act workflow. |
closeEyeDuration | public field | float; default 2 seconds | Duration of the close-eye transition. |
duration | public field | int; default 180 seconds | Estimated Act duration shown as Act Duration(s) in the Editor. |
Plot Boundary
Overview
Plot Boundary is the Creator-facing name of YomovPlotBoundary. It owns the current Plot identity, trigger mode, boundary geometry, guidance data, and optional vehicle configuration. At runtime it creates Boundary_Plot and delegates mesh generation and display control to a private BoundaryGenerator instance.
Configure the public members below on the Plot Boundary component. Internal fields such as boundaryGenerator and cameraLocation are implementation details and are intentionally excluded. SetEncircleMeshFilterEnabled belongs to BoundaryGenerator, not YomovPlotBoundary.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
plotName | public field | string | Plot name used by runtime navigation and events. |
id | public field; hidden in Inspector | string; GUID by default | Unique Plot ID. |
plotType | public field | PlotType; Walking or Vehicle | Selects a walking or vehicle Plot. |
relatedVehicle | public field | GameObject | Vehicle used when plotType is Vehicle. |
multiVehicle | public field | bool | Enables multi-vehicle configuration in the current Editor workflow. |
multiVehicleController | public field | YomovMultiVehicleController | Controller that owns multi-vehicle configuration and runtime behavior. |
autoStartMultiVehicle | public field | bool; default false | Starts the local multi-vehicle session automatically after the Plot becomes active. |
legacyRelatedVehicleList | public field; hidden in Inspector | List<RelatedVehicleInfo> | Migration source retained for older multi-vehicle scene data. |
triggerType | public field | TriggerType; None, Timeline, TimelineCollisionDetection | Selects how Plot switching is triggered. |
OnSwitchPlot | public UnityEvent | UnityEvent<string> | Invoked when this Plot is switched to. |
OnBoundaryEnter | public UnityEvent | UnityEvent<Vector3> | Invoked when the local player enters the Plot boundary. |
OnBoundaryExit | public UnityEvent | UnityEvent<Vector3> | Invoked when the local player leaves the Plot boundary. |
OnLocalPlayerVehicleSessionStarted | public UnityEvent | UnityEvent<int> | Invoked after the local player's multi-vehicle follow session is established. |
index | public field; hidden in Inspector | int | Runtime activation index used by the component. |
plotBoundary | public field | List<Vector3> | Local-space Plot boundary vertices. |
guidePoint | public field | Vector3 | Guidance point used when directing a player back to the Plot. |
bestViewArea | public field | bool | Enables the best-view area. |
bestViewAreaPoints | public field | List<Vector3> | Local-space vertices of the best-view area. |
displayDelay | public field | float; default 30 seconds | Delay before displaying the best-view area. |
activePlotBoundaries | public static field | List<YomovPlotBoundary> | Currently active Plot Boundary components. |
playerInPlotBoundaries | public static field | List<IPlotBoundary> | Plot boundaries that currently contain players. |
Boundary_Plot | related SDK resource | Runtime/Act/Resources/Plot/Boundary_Plot.prefab | Prefab instantiated by YomovPlotBoundary for boundary visualization. |
YomovActManager
Overview
YomovActManager is the runtime navigator and state owner for Acts and Plots. It loads and unloads Act/Plot state, coordinates scene transitions, exposes the current navigation state, and serializes transition operations so login loading, Start synchronization, and seek operations do not race.
Its callbacks are C# Action and Func members, not Inspector-bindable UnityEvents. Subscribe and unsubscribe from code. Game start, pause, resume, seek, and player-height notifications are delivered through other SDK event flows and are not members of YomovActManager.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
Instance | public static property | YomovActManager | Singleton runtime instance. |
CurrentActIndex | public read-only property | int | Current Act index. |
CurrentPlotIndex | public property | int | Current Plot index. |
RouteComplete | public read-only property | bool | Indicates whether route initialization has completed. |
NarrativeData | public read-only property | NarrativeData | Current narrative configuration from YomovActConfig. |
CurrentPlot | public field | YomovPlotBoundary | Current Plot Boundary component. |
CurrentAct | public read-only property | Act | Current Act data. |
OnCreatedRealBoundary | public callback | Action | Raised after the physical venue boundary is created. |
OnLoadPlot | public callback | Action<string> | Raised when a Plot is loaded; the payload is the Plot identifier used by the runtime flow. |
OnLoadAct | public callback | Action<string> | Raised when an Act is loaded. |
OnUnloadAct | public callback | Action<string> | Raised when an Act is unloaded. |
OnBeforeLoadScene | public callback | Action | Raised before a scene load. |
OnLoadLastPlot | public callback | Action | Raised when the last Plot is loaded. |
OnSwitchActAndPlot | public callback | Action<string, string> | Raised for a combined Act and Plot switch. |
OnChangePlotEvent | public callback | Action<string, string> | Raised when the active Plot changes. |
BeforeLoadSceneTask | public callback | Func<string, IAsyncTask> | Optional asynchronous task executed before scene loading. |
TryGetCurrentPlotNames | public method | bool TryGetCurrentPlotNames(out string actName, out string plotName) | Returns the current Act and Plot names when the navigation state is valid. |
IsCurrentStageScene | public method | bool IsCurrentStageScene(string stage) | Checks whether a stage belongs to the currently loaded scene. |
YomovPlotTransition
Overview
YomovPlotTransition responds to Timeline Signals and advances the Plot. In sample scenes it is normally a SignalReceiver event target: when the Timeline reaches a YomovPlotTransition signal marker, SignalReceiver calls LoadNextPlot.
The component exposes no confirmed custom serialized fields in the sample scenes. Configuration is performed through Timeline and SignalReceiver. Place YomovPlotTransition.signal at the correct Timeline time and bind its event to YomovPlotTransition.LoadNextPlot.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
LoadNextPlot | Load Next Plot | Public Plot-switch method. In the sample scene, SignalReceiver calls it after receiving YomovPlotTransition.signal. | method; no parameters; sample method name: LoadNextPlot |
YomovPlotTransition.signal | Plot Switch Signal | Signal Asset placed on the Timeline to mark when the Plot should switch. | SignalAsset; path: Runtime/Act/TimelineSingnal/YomovPlotTransition.signal |
m_Signals | Signal Listener List | SignalReceiver list of monitored signals. The sample includes YomovPlotTransition.signal with resource GUID 5326778191f451e4d9256501a6ee5096. | SignalAsset[] |
m_Events | Signal Event Mapping | SignalReceiver event list that maps Timeline signals to target component methods. | UnityEvent[] |
m_TargetAssemblyTypeName | Target Component Type | Type name stored by the persistent event call. Samples contain both the legacy YomovPlotTransition, Assembly-CSharp form and the package type Yomov.YomovPlotTransition, Yomov.Core. | string |
m_MethodName | Target Method Name | Name of the YomovPlotTransition method called when the signal is received. | string; sample fixed value: LoadNextPlot |
Spatial and Safety Boundaries
YomovRealBoundary
Overview
YomovRealBoundary represents the physical venue boundary at runtime. It is normally used with Boundary_Real or Boundary_Real_Barrier to convert the real safety boundary of a Free-Roam venue into a Unity visualization, collision/layer-filter object, or runtime safety prompt.
It works with BoundaryGenerator, boundary meshes, and Unity Layer settings to distinguish the physical venue boundary from Plot experience boundaries. Content developers should normally use the SDK prefabs instead of creating this component from scratch. Before changing its shape, confirm the venue calibration data, mesh source, and runtime generation flow.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
YomovRealBoundary | Physical Boundary Component | Runtime component type for the physical venue boundary. The sample resource exposes no independent serialized fields; runtime behavior is implemented inside Yomov.Core.dll. | MonoBehaviour; public fields require confirmation |
Boundary_Real | Physical Boundary Resource | Default YOMOV SDK Core prefab for the physical boundary and its boundary-generation configuration. | Prefab; path: Runtime/Act/Resources/Boundary_Real.prefab |
Boundary_Real_Barrier | Barrier Physical Boundary Resource | Barrier variant for experiences that require blocking or a stronger safety-separation presentation. | Prefab; path: Runtime/Act/Resources/Boundary_Real_Barrier.prefab |
encircleMeshFilter | Physical Boundary Mesh | MeshFilter that carries the encircling physical-boundary shape for visualization and spatial-range presentation. | MeshFilter reference; the sample points to the Real child |
meshHeight | Boundary Height | Controls the vertical height of the physical boundary mesh. | float; physical-boundary sample value: 3 |
isPlotBoundary | Is Plot Boundary | Distinguishes Plot experience boundaries from the physical boundary. Disable this value for physical-boundary resources. | bool; physical-boundary sample value: false / 0 |
layerName | Layer Name | Assigns physical-boundary children to a Unity Layer used consistently by rendering, collision, raycast, and runtime filtering. | string; example: Boundary |
includeChildren | Include Children | Controls whether Layer assignment is applied recursively. In the sample, child objects already use the boundary layer, so the value is disabled. | bool; example: false / 0 |
BoundaryGenerator
Overview
BoundaryGenerator generates and controls boundary meshes. It converts boundary points, convex-hull results, and guidance objects into renderable Unity meshes. It supports both physical-boundary resources and Plot Boundary resources.
The component normally sits on the root of Boundary_Real, Boundary_Real_Barrier, or Boundary_Plot. Verify encircleMeshFilter, meshHeight, isPlotBoundary, and optional guideObj and PlayerGuidePath references so that physical and Plot boundaries do not use the wrong height, layer, or boundary-type flag.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
bestViewAreaMeshFilter | private serialized field | MeshFilter | Mesh used for the best-view area. |
encircleMeshFilter | private serialized field | MeshFilter | Mesh used for the Plot or physical boundary. |
meshHeight | private serialized field | float; default 3 | Vertical height of the generated boundary mesh. |
guideObj | private serialized field | GameObject | Standard guidance object. |
PlayerGuidePath | private serialized field | GameObject | Player path-guidance object. |
convexHull | public field | List<Vector2> | 2D boundary points used by mesh generation. |
isPlotBoundary | private serialized field | bool | Distinguishes a Plot boundary from a physical venue boundary. |
GeneratorBoundary | public method | void GeneratorBoundary(List<Vector2> points) | Generates or updates the boundary mesh from 2D points. |
GeneratorBestViewArea | public method | void GeneratorBestViewArea(List<Vector3> points) | Generates the best-view area mesh. |
SetBoundaryAlpha | public method | void SetBoundaryAlpha(float alpha) | Sets boundary opacity. |
OpenBoundary | public method | void OpenBoundary() | Opens the boundary display. |
CloseBoundary | public method | void CloseBoundary() | Closes the boundary display. |
SetGuidePoint | public method | void SetGuidePoint(Vector3 point) | Sets the guidance target point. |
SetGuideEnabled | public method | void SetGuideEnabled(bool enabled) | Enables or disables standard guidance. |
SetEncircleMeshFilterEnabled | public method | void SetEncircleMeshFilterEnabled(bool enabled) | Enables or disables the boundary mesh. |
SetBestViewEnabled | public method | void SetBestViewEnabled(bool enabled) | Enables or disables the best-view area. |
SetPlayerGuidePathEnabled | public method | void SetPlayerGuidePathEnabled(bool enabled) | Enables or disables the player guide path. |
AllActiveBoundaryCheckIntersection | public method | void AllActiveBoundaryCheckIntersection() | Checks intersections across active boundaries. |
PlayerGuidePath
Overview
PlayerGuidePath displays a route from the player's current position to a target point, guidance point, or safety area. YOMOV SDK Core provides it as Runtime/Act/PlayerGuidePath/PlayerGuidePath.prefab. The root carries the path component, while the Line child uses a LineRenderer for the visible route.
Boundary or Plot guidance can use this component to return players who have crossed a boundary or moved away from the recommended area. Keep the line reference assigned and preserve the prefab's Void Layer configuration.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
line | Path Line Object | Reference used to render path points as a visible guide line. The sample points to the LineRenderer on the Line child. | LineRenderer reference |
m_Name | Resource Name | Unity prefab root name used to identify the path object in assets, the Hierarchy, and runtime instances. | string; example: PlayerGuidePath |
m_Layer | Unity Layer | Unity object layer index used by rendering and interaction filters. | int; example: 27 |
layerName | Layer Name | Assigns the path guidance object to the designated Unity Layer so boundary collision and other spatial filters do not process it incorrectly. | string; example: Void |
includeChildren | Include Children | Applies the Layer recursively. The sample enables it because the path line is on a child object. | bool; example: true / 1 |
m_UseWorldSpace | Use World Space | LineRenderer coordinate-space setting. The sample disables world space, so vertices are interpreted in local space. | bool; example: false / 0 |
m_Loop | Loop Path | LineRenderer loop setting. Player guidance is normally an open path from the player to the target. | bool; example: false / 0 |
Runtime and Device Initialization
XRSDKInit
Overview
XRSDKInit is the XR runtime initialization entry point in YOMOV SDK Core. It normally sits on an SDK root prefab such as VoidCommon or CustomYomovLBE. At startup it identifies the headset type, filters OpenXR Features by device vendor, starts the XR Loader and XR subsystems, starts hand tracking, and activates VRRig after initialization.
Its script execution order is -6000, so it runs early. Verify the vrRig and xrOrigin references. If vrRig is not assigned, the component tries to load Resources/VRRig. Device detection currently matches SystemInfo.deviceModel strings for Pico, YVR / Play For Dream, VIVE / HTC, Meta / Quest, and related devices.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
vrRig | VR Rig Reference | VRRig Transform held by the component. The object is disabled during initialization and activated after OpenXR/device initialization. It contains XR Origin, XR Interaction Manager, input, and hand-tracking objects. | Transform; [SerializeField]; sample prefab points to the VRRig child |
vrRigPath | Default VRRig Resource Path | Resources path used to load and instantiate the default VRRig when vrRig is not assigned. | string; default: VRRig |
HeadsetType | Headset Type Enum | Records the running device family and drives OpenXR Feature enable/disable logic. | enum: None, Pico, YVR, VIVE, Meta |
headsetType | Current Headset Type | Static runtime state set by LoadConfig after device-model detection. | static HeadsetType; default: HeadsetType.None; public read-only access |
xrOrigin | XR Origin Reference | XR Origin used in OpenXR mode. After initialization, it is used to refresh tracking-origin mode from Device to Floor. | XROrigin; active under YOMOV_OPENXR && YOMOV_XR_HANDS; may be empty or point to VRRig/XROrigin |
Awake | Awake Initialization | Loads or binds VRRig, disables it temporarily, and runs device detection. | Unity lifecycle method; called automatically |
Start | Startup Flow | Starts the XR initialization coroutine. Uses InitializeXR with the full OpenXR conditions or a simplified path when XR packages are unavailable. | Unity lifecycle method; called automatically |
LoadConfig | Load Device Configuration | Matches SystemInfo.deviceModel and updates headsetType. | private method; keywords: Pico, YVR, Play For Dream, HTC, VIVE, Meta, Quest |
InitializeXR | XR Initialization Coroutine | Initializes OpenXR outside the Editor when a supported headset is detected, activates VRRig, checks XRComponentManager.Instance, and starts the tracking-origin refresh. | IEnumerator; internal coroutine |
EnsureXRStarted | Ensure XR Is Running | Uses XRGeneralSettings.Instance.Manager to initialize the XR Loader, start XR subsystems, and initialize hand tracking. | IEnumerator; depends on XR Management |
ListAllFeatures | Enumerate OpenXR Features | Reads OpenXRSettings Features and disables vendor Features that do not match the detected device, reducing multi-device configuration conflicts. | private method; recognizes PICO / VIVE / META by class-name keywords |
InitializeHandTracking | Initialize Hand Tracking | Finds all XRHandSubsystem instances and starts any subsystem that is not running. | IEnumerator; depends on XR Hands |
changeTrackingOriginMode | Change Tracking Origin Mode | Sets XROrigin.RequestedTrackingOriginMode to Device, waits until end of frame, then sets it to Floor to refresh floor-space positioning. | IEnumerator; internal coroutine |
SetXROrginBind | Bind XR Origin | Public binding method that gets an XROrigin component from the supplied Transform and assigns it to xrOrigin. | public void SetXROrginBind(Transform _XROrginTransform) |
IsHeadsetType | Check Headset Type | Public static helper that checks whether the detected headsetType matches the supplied type. | public static bool IsHeadsetType(HeadsetType type) |
executionOrder | Script Execution Order | Unity script import setting that ensures this initialization component runs early. | int; example: -6000 |
XRComponentManager
Overview
XRComponentManager is the central XR component registry in YOMOV SDK Core. After VRRig is activated, it collects and caches XR Origin, XRInputModalityManager, left and right hand tracking, hand skeleton drivers, and the teleport ray interactor. XRSDKInit checks its singleton after initialization.
Other runtime modules query these references instead of depending on a specific Unity XR hierarchy. For example, Creator replay hand logic gets local XRHandTrackingEvents through XRComponentManager.Instance, reducing the risk of binding to a remote or sample hand model. Stub implementations return defaults when XR Hands or XR Interaction Toolkit packages are unavailable.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
Instance | Singleton Instance | Global access point. On first access, it searches the scene for XRComponentManager and reports an error or returns null if none is found. | static XRComponentManager |
leftHandTracking | Left-Hand Tracking Component | Cached left-hand XRHandTrackingEvents used for tracking state and events. | XRHandTrackingEvents; internal field |
rightHandTracking | Right-Hand Tracking Component | Cached right-hand XRHandTrackingEvents used for tracking state and events. | XRHandTrackingEvents; internal field |
leftHandSkeletonDriver | Left-Hand Skeleton Driver | Cached left XRHandSkeletonDriver used to obtain the hand root Transform or disable live driving during replay. | XRHandSkeletonDriver; internal field |
rightHandSkeletonDriver | Right-Hand Skeleton Driver | Cached right XRHandSkeletonDriver used to obtain the hand root Transform or disable live driving during replay. | XRHandSkeletonDriver; internal field |
inputModalityManager | Input Modality Manager | Cached XRInputModalityManager used to identify controller or hand-tracking mode and register mode-change events. | XRInputModalityManager; internal field |
xrOrigin | XR Origin | Cached XROrigin used to expose the XR root and Camera. | XROrigin; internal field |
teleportRayInteractor | Teleport Ray Interactor | Cached XRRayInteractor whose name contains Teleport or whose Layer is Teleport. | XRRayInteractor; internal field |
InputModalityManager | Input Modality Accessor | Read-only access to the cached input modality manager. | XRInputModalityManager; read-only property |
XROrigin | XR Origin Accessor | Read-only access to the cached XROrigin. | XROrigin; read-only property |
TeleportRayInteractor | Teleport Ray Accessor | Read-only access to the cached teleport ray interactor. | XRRayInteractor; read-only property |
IsLeftHandTracked | Left Hand Is Tracked | Returns handIsTracked from the left-hand tracking component. | bool; read-only property |
IsRightHandTracked | Right Hand Is Tracked | Returns handIsTracked from the right-hand tracking component. | bool; read-only property |
IsMotionControllerMode | Is Controller Mode | Returns whether the current input modality is MotionController. | bool; read-only property |
IsHandTrackingMode | Is Hand-Tracking Mode | Returns whether the current input modality is TrackedHand. | bool; read-only property |
InitializeComponents | Initialize XR References | Runs from Awake, scans children for hand tracking, input modality, XROrigin, and teleport ray references, and disables live XR input for replay mode. | private method; called automatically |
RefreshComponents | Refresh Component References | Public refresh entry point for rescanning references after XR child objects are created or replaced at runtime. | public void RefreshComponents() |
IsHandTracked | Query Hand Tracking | Returns left- or right-hand tracking state according to the supplied flag. | public bool IsHandTracked(bool isLeftHand) |
GetHandRootTransform | Get Hand Root | Returns XRHandSkeletonDriver.rootTransform when available, otherwise XRHandTrackingEvents.transform. | public Transform GetHandRootTransform(bool isLeftHand) |
GetHandTrackingEvents | Get Hand-Tracking Events | Returns the left or right XRHandTrackingEvents for recording, replay, or custom interaction logic. | public XRHandTrackingEvents GetHandTrackingEvents(bool isLeftHand) |
RegisterMotionControllerModeStarted | Register Controller-Mode Event | Adds a callback to XRInputModalityManager.motionControllerModeStarted. | public void; parameter: UnityAction callback |
RegisterHandTrackingModeStarted | Register Hand-Tracking-Mode Event | Adds a callback to XRInputModalityManager.trackedHandModeStarted. | public void; parameter: UnityAction callback |
UnregisterMotionControllerModeStarted | Unregister Controller-Mode Event | Removes a callback from motionControllerModeStarted. | public void; parameter: UnityAction callback |
UnregisterHandTrackingModeStarted | Unregister Hand-Tracking-Mode Event | Removes a callback from trackedHandModeStarted. | public void; parameter: UnityAction callback |
GetInputModalityTransforms | Get Input Modality Transforms | Outputs the left hand, right hand, left controller, and right controller Transforms. | public bool; four out Transform values |
GetXROriginAndCamera | Get XR Origin and Camera | Outputs the XR Origin Transform and Camera Transform for head or XR-root positioning logic. | public bool; out Transform xrOriginTransform, out Transform cameraTransform |
GetLocomotionProviders | Get Locomotion Providers | Finds Turn and Move objects under LocomotionMediator and outputs their Transforms. | public bool; two out Transform values |
GetHandRootBones | Get Hand Root Bones | Finds valid rootBone values in the left and right hand SkinnedMeshRenderer components. | public bool; out Transform leftHandRootBone, out Transform rightHandRootBone |
EnsureInputActionAsset | Ensure Input Action Asset | Editor helper that ensures InputActionManager under VRRig contains the specified InputActionAsset. | public bool; default resource path: XRISetting/CMP XRI Default Input Actions |
EnsureXRInteractionManager | Ensure XR Interaction Manager | Editor helper that creates XRInteractionManager under VRRig when one is not present. | public GameObject; Editor-only behavior is documented in source comments |
EnsureEventSystem | Ensure Event System | Editor helper that creates an object containing EventSystem and XRUIInputModule when XRUIInputModule is not present under VRRig. | public GameObject; Editor-only behavior is documented in source comments |
DisableLiveXRInputsForReplay | Disable Live XR Input for Replay | When Resources/ConfigData has isReplay set to true, disables XRInputModalityManager, InputActionManager, and hand tracking so live input does not interfere with replay data. | private method; internal runtime logic |
YOMOV_XR_HANDS && YOMOV_XR_TOOLKIT | Full Implementation Compile Condition | The full implementation is used only when the XR Hands and XR Toolkit scripting symbols are defined; otherwise the Stub implementation is used. | scripting define symbols |
Availability depends on scripting defines. The full YOMOV_XR_HANDS && YOMOV_XR_TOOLKIT branch exposes the complete surface. The Hands-only and Stub branches are not API-equivalent; the Stub branch does not expose GetHandTrackingEvents, InputModalityManager, XROrigin, or TeleportRayInteractor. Guard calls with the same compile conditions used by your project. Sample prefab values describe SDK defaults and are not fixed values for every content project.
Multiplayer Synchronization
YomovServerManager
Overview
YomovServerManager is the server-side business manager in the SDK Creator multiplayer synchronization chain. It handles login and content event flows, maintains team/player state, forwards synchronization commands, persists progress data, and coordinates player and hand synchronization entities through the network abstraction.
The table below lists members that actually belong to YomovServerManager. Transport ports, timeouts, SpawnablePrefabs, ClientType, and _playerPrefab/_HandsPrefab/_FingerPrefab are owned by FishNet transport, NetworkManager, FishNetInit, or PlayerSpawner components on the prefab and are not YomovServerManager members.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
Instance | inherited public static property | YomovServerManager | Singleton server manager. |
playerPrefab | public field | GameObject | Business-layer player synchronization prefab. |
handPrefab | public field | GameObject | Business-layer hand synchronization prefab. |
LogPlayerInfo | public method | void LogPlayerInfo() | Writes the current team and player state to the Unity log. |
SetPlayerTransform | public method | void SetPlayerTransform(string playerId, Vector3 pos, Quaternion rotation) | Updates a synchronized player's transform. |
SetPlayerHandData | public method | void SetPlayerHandData(int connectionId, VRAvatar.MultiHandsSyncData handsSyncData, Quaternion rootRotation) | Updates synchronized hand data for a client connection. |
SetTeamStageAndArea | public method | void SetTeamStageAndArea(string teamId, string stage, string area) | Updates a team's current Act and Plot identifiers. |
RemoveTeamData | public method | async void RemoveTeamData(string teamId) | Removes cached data for a team. |
ServerForwardEvent | public Yomov event handler | void ServerForwardEvent(ServerForwardEvent eventData) | Forwards an event through the server flow. |
OnSyncPlotEvent | public Yomov event handler | void OnSyncPlotEvent(C2S_SyncPlotEventData eventData) | Processes Plot synchronization data from a client. |
LoadPlotRequest | public Yomov event handler | Task<IResponse> LoadPlotRequest(C2S_LoadPlotRequest request) | Processes a coordinated Plot-load request. |
LoadPlotRequest | public Yomov event handler overload | Task<IResponse> LoadPlotRequest(C2S_LoadSceneRequest request) | Processes a coordinated scene-load request. |
HandleSyncContentData | public method | void HandleSyncContentData(SyncContentData data) | Receives content synchronization data from the playback-control bridge. |
HandleSyncContentControlData | public method | void HandleSyncContentControlData(SyncContentControlData data) | Receives content-control data from the playback-control bridge. |
ReceiveSyncContentData | public method | void ReceiveSyncContentData(SyncContentData syncData) | Applies synchronized content data. |
SendSyncCommand | public method | void SendSyncCommand(SyncContentControlData controlData) | Sends a synchronized content-control command. |
YomovNetClientManager
Overview
YomovNetClientManager is the client-side manager in the SDK Creator multiplayer synchronization chain. It connects to the server, sends login information, starts content after successful login, and responds to playback control, scene loading, progress persistence, and player-data events.
The runtime class is YomovNetClientManager in Yomov.Creator.dll; the associated prefab is currently named YomovClientManager. Server address, port, SpawnablePrefabs, ClientType, and ConnectAsync belong to related FishNet transport, NetworkManager, or FishNetInit components on that prefab, not to YomovNetClientManager.
Properties
Identifier | Kind / Access | Type or Signature | Description |
|---|---|---|---|
Instance | inherited public static property | YomovNetClientManager | Singleton client manager. |
OnContentControlEvent | public Yomov event handler | async void OnContentControlEvent(S2C_SyncContentControlEventData eventData) | Processes playback-control commands delivered to the client. |
SaveProgress | public method | IAsyncTask<S2C_SaveProgressResponse> SaveProgress(string teamData) | Saves team/content progress through the server flow. |
SavePlayerData | public method | IAsyncTask<S2C_SavePlayerDataResponse> SavePlayerData(string playerData) | Saves player-level data through the server flow. |
RequestLoadScene | public method | IAsyncTask<S2C_LoadSceneResponse> RequestLoadScene(string sceneName, int timeout = int.MaxValue) | Requests coordinated loading of a scene. |
OnConnectionStarted | public login-flow method | bool OnConnectionStarted(out long generation) | Starts a generation-scoped login flow after the network connection enters Started. |
OnConnectionStopped | public login-flow method | void OnConnectionStopped() | Invalidates the current login generation after the connection stops. |
TryBeginLoginRequest | public login-flow method | bool TryBeginLoginRequest(long generation) | Prevents duplicate login requests for the same connection generation. |
IsCurrentConnection | public login-flow method | bool IsCurrentConnection(long generation) | Checks whether an asynchronous login operation still belongs to the active connection. |
SendLoginInfoAsync | private implementation | Task; internal signature | Internal login request flow. Do not call it as a content API. |
RegisterBeforeLoadSceneTask | private lifecycle method | void RegisterBeforeLoadSceneTask() | Assigns YomovActManager.BeforeLoadSceneTask while the component is enabled; not a public API. |
PlayerSync
Overview
PlayerSync is the network synchronization component for the player entity. It is attached to FishNetPlayer, inherits TeamNetBehaviour, and implements IPlayerSync. It synchronizes team membership, player ID, content ID, nickname, Avatar resource names, and head/body pose data.
The component transports data and dispatches change events; presentation logic remains in the business layer. ShouldCreateAvatar, ShouldSyncBodyData, and GetBodySyncData inject local creation and body-data behavior. With FishNet enabled, FishNetConfig.AvatarSyncTime controls the synchronization cadence.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
sameTeamDistance | Team Player Sync Distance | Inherited from TeamNetBehaviour; configures network visibility or synchronization distance for Team Player objects. | float; FishNetPlayer sample: 9999 |
otherTeamDistance | Non-Team Player Sync Distance | Inherited from TeamNetBehaviour; limits network visibility or synchronization distance for Non-Team Player objects. | float; FishNetPlayer sample: 5 |
teamId | Team ID | Team identifier. Changes invoke OnTeamIdChange and notify the business layer through OnTeamIdChangedEvent. | long; SyncVar; default: 0 |
avatarResourceName | Avatar Resource Name | Base Avatar resource name used to create or identify the player's Avatar. | string; SyncVar; default: empty |
avatarSkinResourceName | Avatar Skin Resource Name | Avatar skin resource name. Changes can trigger Avatar skin recreation or refresh. | string; SyncVar; default: empty |
playerOriginId | Original Player ID | Original platform- or content-side identifier used to recognize the player across systems. | long; SyncVar; default: 0 |
nickname | Player Nickname | Display name. Changes update the GameObject name and invoke the nickname-change event. | string; SyncVar; default: empty |
contentId | Content ID | Identifier of the content currently associated with the player. | long; SyncVar; default: 0 |
multiBodySyncData | Body Synchronization Data | Body key-point data used to update remote Avatar position, orientation, and body scale. | VRAvatar.MultiBodySyncData; includes RootPoint, HeadPoint, syncPointState, BodyScale, and related fields |
ShouldCreateAvatar | Create Avatar Delegate | Business-layer predicate used to decide whether an Avatar should be created or refreshed. | Func<bool>; may be null |
ShouldSyncBodyData | Synchronize Body Data Delegate | Business-layer predicate controlling whether the local owner continuously uploads body data. | Func<bool>; may be null |
GetBodySyncData | Get Body Data Delegate | Business-layer data provider read at the FishNetConfig.AvatarSyncTime cadence and synchronized through ServerRpc. | Func<VRAvatar.MultiBodySyncData>; may be null |
GetLocalPlayerPosition | Get Local Player Position Delegate | Business-layer provider used for distance checks, synchronization conditions, or external logic. | Func<Vector3>; may be null |
SetPlayerData | Set Player Data | Client request that sets team, player ID, content ID, nickname, Avatar resource, and skin resource on the server and joins the NetworkObject to the team. | ServerRpc; parameters: teamId, playerOriginId, contentId, nickname, avatarResourceName, avatarSkinResourceName |
ServerSetPlayerData | Set Player Data on Server | Writes player identity and resource data directly on the server. | public method; calls from non-server contexts are rejected |
SetAvatarSkinResourceName | Set Avatar Skin Resource Name | Client request that updates the Avatar skin resource name on the server and synchronizes it to other clients. | ServerRpc; parameter: string skinName |
ServerSetMultiBodySyncData | Set Body Data on Server | Writes multiBodySyncData directly on the server for server-side correction or non-client upload flows. | public method; parameter: VRAvatar.MultiBodySyncData |
OnStartClientEvent | Client Started Event | Invoked after OnStartClient so the business layer can initialize presentation for the network object. | event Action |
OnDestroyEvent | Destroyed Event | Invoked when the component is destroyed so the business layer can clear Avatar objects, listeners, or cached references. | event Action |
OnOwnerUpdateEvent | Owner Update Event | Invoked every Update while the local client owns this NetworkObject. | event Action |
OnTeamIdChangedEvent | Team Changed Event | Notifies the business layer when teamId changes. | event Action<long, long, bool>; parameters: prev, next, asServer |
OnPlayerNickChangedEvent | Nickname Changed Event | Notifies the business layer when nickname changes. | event Action<string, string, bool>; parameters: prev, next, asServer |
OnAvatarSkinChangedEvent | Avatar Skin Changed Event | Notifies the business layer when avatarSkinResourceName changes and ShouldCreateAvatar permits creation. | event Action<string, string, bool>; parameters: prev, next, asServer |
OnBodySyncDataChangedEvent | Body Data Changed Event | Notifies the presentation layer when multiBodySyncData changes. | event Action<VRAvatar.MultiBodySyncData, VRAvatar.MultiBodySyncData, bool> |
HandsSync
Overview
HandsSync synchronizes the poses of both hands. It is attached to FishNetHands, inherits TeamNetBehaviour, and implements IHandsSync. It transports left- and right-hand position, rotation, and tracking state for remote Avatar or interaction presentation.
ShouldSyncHandsData and GetHandsSyncDataFunc determine whether data is uploaded and which data is sent. With FishNet enabled, the owner uploads at the FishNetConfig.AvatarSyncTime cadence and the server distributes updates to other clients.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
sameTeamDistance | Team Player Hand Sync Distance | Inherited from TeamNetBehaviour; configures network visibility or synchronization distance for Team Player hand objects. | float; FishNetHands sample: 9999 |
otherTeamDistance | Non-Team Player Hand Sync Distance | Inherited from TeamNetBehaviour; limits network visibility or synchronization distance for Non-Team Player hand objects. | float; FishNetHands sample: 3 |
multiHandsSyncData | Two-Hand Synchronization Data | Synchronizes key hand poses and tracking state and notifies the business layer through OnHandsSyncDataChangedEvent. | VRAvatar.MultiHandsSyncData; includes RightHandPoint, LeftHandPoint, LeftHandISTracking, RightHandISTracking |
_HandsData | Local Hand Data Cache | Internal cache for the hand data prepared for upload. | VRAvatar.MultiHandsSyncData; internal field |
_UpdateTime | Synchronization Timer | Internal timer used to enforce the FishNetConfig.AvatarSyncTime upload cadence. | float; internal field |
ShouldSyncHandsData | Synchronize Hands Delegate | Business-layer predicate controlling whether the local owner continuously uploads hand data. | Func<bool>; may be null |
GetHandsSyncDataFunc | Get Hand Data Delegate | Business-layer provider read on the synchronization cadence and uploaded through ServerRpc. | Func<VRAvatar.MultiHandsSyncData>; may be null |
GetMultiHandsSyncData | Get Two-Hand Data | Returns the synchronized hand poses and tracking state to the business layer. | public getter; returns VRAvatar.MultiHandsSyncData |
ServerSetMultiHandsSyncData | Set Hand Data on Server | Writes multiHandsSyncData directly on the server for correction or non-client upload paths. | public method; parameter: VRAvatar.MultiHandsSyncData |
OnStartClientEvent | Client Started Event | Invoked after OnStartClient so the business layer can initialize hand presentation. | event Action |
OnHandsSyncDataChangedEvent | Hand Data Changed Event | Notifies the business layer to refresh remote hand position, rotation, and tracking display. | event Action<VRAvatar.MultiHandsSyncData, VRAvatar.MultiHandsSyncData, bool> |
FingersSync
Overview
FingersSync synchronizes finger-bone poses. It is attached to FishNetFingers, inherits TeamNetBehaviour, and implements IFingersSync. It transports the rotations of the five fingers on both hands so remote clients can reproduce gestures and detailed hand motion.
HandsSync handles whole-hand position, rotation, and tracking state; FingersSync handles rotations for each finger joint. With FishNet enabled, SetSyncLeftHand and SetSyncRightHand update SyncVars through ServerRpc at the FishNetConfig.AvatarSyncTime cadence.
Properties
Name | Display Name | Description | Type / Value |
|---|---|---|---|
sameTeamDistance | Team Player Finger Sync Distance | Inherited from TeamNetBehaviour; configures network visibility or synchronization distance for Team Player finger objects. | float; FishNetFingers sample: 3 |
otherTeamDistance | Non-Team Player Finger Sync Distance | Inherited from TeamNetBehaviour; limits network visibility or synchronization distance for Non-Team Player finger objects. | float; FishNetFingers sample: 0 |
_syncLeftHand | Left-Hand Finger Data | Left-hand finger-bone rotations. Changes invoke OnLeftHandDataChange and notify OnLeftHandDataChangedEvent. | FingersData; SyncVar; SendRate = FishNetConfig.AvatarSyncTime; sample joints start at 0 |
_syncRightHand | Right-Hand Finger Data | Right-hand finger-bone rotations. Changes invoke OnRightHandDataChange and notify OnRightHandDataChangedEvent. | FingersData; SyncVar; SendRate = FishNetConfig.AvatarSyncTime; sample joints start at 0 |
FingersData.thumb | Thumb Data | Thumb bone data in FingersData. | Finger |
FingersData.index | Index Finger Data | Index-finger bone data in FingersData. | Finger |
FingersData.middle | Middle Finger Data | Middle-finger bone data in FingersData. | Finger |
FingersData.ring | Ring Finger Data | Ring-finger bone data in FingersData. | Finger |
FingersData.little | Little Finger Data | Little-finger bone data in FingersData. | Finger |
Finger.metacarpal | Metacarpal Rotation | Metacarpal joint rotation for one finger. | int; Euler angles packed at 10 bits per axis |
Finger.proximal | Proximal Rotation | Proximal joint rotation for one finger. | int; Euler angles packed at 10 bits per axis |
Finger.intermediate | Intermediate Rotation | Intermediate joint rotation for one finger. | int; Euler angles packed at 10 bits per axis |
Finger.distal | Distal Rotation | Distal joint rotation for one finger. | int; Euler angles packed at 10 bits per axis |
cancellationTokenSource | Destroy Cancellation Token | Lifecycle cancellation token used for compatibility with older Unity versions. Created in Awake and cancelled in OnDestroy. | CancellationTokenSource; public field |
destroyCancellationTokens | Destroy Cancellation Token Array | IFingersSync property that exposes cancellationTokenSource as an array for unified asynchronous-task cancellation. | CancellationTokenSource[]; interface property |
GetSyncLeftHand | Get Left-Hand Finger Data | Returns the currently synchronized left-hand FingersData. | public getter; returns FingersData |
GetSyncRightHand | Get Right-Hand Finger Data | Returns the currently synchronized right-hand FingersData. | public getter; returns FingersData |
SetSyncLeftHand | Set Left-Hand Finger Data | Writes left-hand FingersData on the client and synchronizes it through ServerRpc when FishNet is enabled. | public method; parameter: FingersData |
SetSyncRightHand | Set Right-Hand Finger Data | Writes right-hand FingersData on the client and synchronizes it through ServerRpc when FishNet is enabled. | public method; parameter: FingersData |
OnStartClientEvent | Client Started Event | Invoked after OnStartClient so the business layer can initialize finger presentation. | event Action |
OnDestroyEvent | Destroyed Event | Invoked from OnDestroy so gesture-synchronization listeners and asynchronous tasks can be cleared. | event Action |
OnLeftHandDataChangedEvent | Left-Hand Data Changed Event | Notifies the business layer when _syncLeftHand changes. | event Action<FingersData, FingersData, bool>; parameters: prev, next, asServer |
OnRightHandDataChangedEvent | Right-Hand Data Changed Event | Notifies the business layer when _syncRightHand changes. | event Action<FingersData, FingersData, bool>; parameters: prev, next, asServer |