跳到主要内容

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