High quality and standardized Learning Analytics foundation for your XR Project

Enable Learning Analytics in your Unity XR Application by using prepared tracking mechanisms and create your own IDE-supported xAPI statements.

OmiLAXR Logo
_

News from our Discord

What's new in the ecosystem

· Ser.Ragnar

xapi v2.0.0

🚀 Features - The xAPI Registry has a new home on GitHub Pages. It is deployed straight from the repository OmiLAXR-Ecosystem/xapi, so it no longer depends on a self-hosted server and stays reliably available. - The new website has full-text search, definition history, and German/English language support. - Added shareable definition lists with JSON/CSV export and direct JSON access to all definitions. - Added automatic definition validation and contribution guides in German and English. 🔧 Fixed - Corrected English names and descriptions across 86 definitions. ⚠️ Breaking Changes - Changed the registry IRI base to https://omilaxr-ecosystem.github.io/xapi/. Every definition lists its former IRI as exactMatch, so older LRS data can be mapped. OmiLAXR.xAPI 2.2.5 (will be release in the next days) switches to the new base automatically. - Moved media/extensions/duration to media/extensions/activity/duration, so it is now included in generated Unity registries. Update references to this extension.

· Ser.Ragnar

xAPI4Unity v2.3.0

🚀 Features - Added a guided setup wizard for downloading definitions, generating the registry, validating configuration, and exporting .unitypackage files. It replaces the Setup xAPI definitions window. - Redesigned the definitions editor in the style of the new wizard: a searchable tree of contexts, verbs, activities and extensions, and a detail view with the registry IRI, checks for missing names and descriptions, multilingual editing, exactMatch support and a raw JSON view. - New definitions can be created right in the editor and show their path and IRI before the file is created. Save with Ctrl/Cmd+S or "Save all"; unsaved edits survive script reloads. - Migrated the default definitions source to GitHub and updated registry links to the new website. Legacy source settings are migrated automatically. 🔧 Fixed - Fixed definition downloads from GitHub and pulling updates for Git-cloned definitions. - Fixed duplicate registry generation when saving definitions. - Removed nullable annotation warnings from the editor and generated registries. - Improved readability in the light editor theme, fixed dropdown selection, and newly created configuration files now appear immediately in the Project window.

· Sergej.Goerzen

OmiLAXR v2.2.4

🚀 Features - Added support for Unity >6.5. 🔧 Fixed - Replaced deprecated Unity APIs with Unity 6.5-compatible alternatives (GetEntityId, FindAnyObjectByType, updated FindObjectsByType usage). - Removed compiler warnings and deprecations across pipeline, team, and tracking behaviour internals. OmiLAXR.xAPI v2.2.4 🔧 Fixed - Fixed Unity Package Manager installation errors caused by xapi.config.json being registered as a file sample instead of a sample directory. - Fixed the sample copier path for xapi.config.json.

· Ser.Ragnar

OmiLAXR v2.2.3

🚀 Features - Improved endpoint sending stability and throughput (multi-threading refactor in Endpoint). - Improved scheduler behavior and runtime efficiency (Scheduler, IntervalTicker). - Improved tracking performance (TransformWatcher, TransformTrackingBehaviour, pipeline prefabs). - Updated package version metadata. 🔧 Fixed - Added safeguards against invalid/null statements in LocalFileEndpoint. - Fixed Frustum behavior related to issue #17. OmiLAXR.xAPI v2.2.3 🚀 Features - Added ExampleHigherComposer sample under Samples~/xApiComposers. - Improved statement-processing performance in xApiStatement. - Updated xAPI extension JSON serialization to preserve typed extension values. - Updated package version metadata. 🔧 Fixed - Fixed incorrect context version handling in ScenarioContextHook. - Removed a broken runtime higher-composer example and stabilized xApiSemanticComposer.

· Ser.Ragnar

OmiLAXR v2.2.2

🚀 Features - Added string version to ToDataStandardString(), ToJsonString() and ToCsvFormat() in IStatement. OmiLAXR.xAPI v2.2.2 🚀 Features - Added string version to ToDataStandardString(), ToJsonString() and ToCsvFormat() in IStatement. 🔧 Fixes - Fixed issue that Learning Record Store still sends statements by default with version 2.0.0.

· Ser.Ragnar

OmiLAXR v2.2.1

🚀 Features - Added virtual (overridable) IncludeInactive property to AutoListener<T>. This way future game objects can be consided. By default its true. Please write protected override bool IncludeInactive => false; if you wish to disable it and only look for active game objects. ❗ 🔧 Fixes - Fixed error that is thrown when CSV files of (CSV) File Endpoint flushes. - Removed some warnings OmiLAXR.xAPI v2.2.1 🔧 Fixes - xAPI version change did not affect. It was always v2.0.0. Now, it is 1.0.3 by default and the change is taken. - Removed some warnings

· Ser.Ragnar

OmiLAXR.UnityXR (OpenXR) v1.1.0

Changes - Made OmiLAXR v2.2.0 compatible.

· Ser.Ragnar

Release Notes for OmiLAXR.MetaXR v1.0.0

🚀 Features - Added MetaXRTeleportListener and MetaXRTeleportationTrackingBehaviour for Oculus.Interaction.Locomotion.TeleportInteractor - Added MetaXRInteractableUnityEventWrapperListener and MetaXRInteractableUnityEventWrapperTrackingBehaviour for Oculus.Interaction.InteractableUnityEventWrapper - Added MetaXRGrabInteractableListener and MetaXRGrabInteractableTrackingBehaviour for Oculus.Interaction.GrabInteractable - Added MetaXRHandGrabInteractableListener and MetaXRGrabInteractableTrackingBehaviour for Oculus.Interaction.HandGrabInteractable - Added MetaXRPointableUnityEventWrapperListener and MetaXRPointableUnityEventWrapperTrackingBehaviour for Oculus.Interaction.PointableUnityEventWrapper - Added MetaXRRayInteractableListener and MetaXRRayInteractableTrackingBehaviour for Oculus.Interaction.RayInteractable - Added MetaXROVRHandTransformListener for Oculus.VR.OVRHand using OmiLAXR's TransformTrackingBehaviour - Added MetaXROVREyeGazeListener for Oculus.VR.OVREyeGaze using OmiLAXR's TransformTrackingBehaviour - Added MetaXROVRInputTrackingBehaviour for OVRInput Requirements - OmiLAXR v2.2.0 - OmiLAXR.xAPI v2.2.0 Credits Special thanks to @Marc to implementing this package.

· Ser.Ragnar

OmiLAXR.xAPI v2.2.0 ❗BREAKING CHANGES❗

HOW TO INSTALL 0. Update xAPI4Unity Package. 1. Backup your Assets/xapi folder as a copy. You can keep your folder and patch a new version into yours. 2. Click on xAPI4Unity / Download newest 'xapi' patch into mine. 3. Click on xAPI4Unity / Update xAPI.Registry. 4. Update OmiLAXR Packages. 🚀 Features TinCan.dll - Updated TinCan.NET Library to own Fork: https://github.com/SGoerzen/TinCan.NET - Advantages: development in direction of xAPI 2.0 - Added attachments - Improved some URI consistencies. - Updated Newtonsoft from v8 to v13. Strict types in xAPI Extensions 1. To use them click on Menu OmiLAXR / Samples / Copy 'xapi.config.json'. 2. Rebuild your xAPI.Registry with xAPI4Unity. Eye Tracking - "actor hovered/fixated/exited/saccaded/pursued vrObject" - Exchangable logics Preview: https://youtu.be/nPS3H5GoF1Q Facial Tracking - "actor changed face" - "actor expressed emotion" xAPI - Improved building UX. "actor", "Does" and "Activity" are required to create a statement. - Prepared for xAPI 2.0.0. By default: 1.0.3 is still selected. You can switch the version in xAPI Registry component. - Added xAPI Attachments. - A lot of new definitions. See: https://gitlab.com/learntech-rwth/xapi/-/merge_requests/54/diffs - Updated xAPI platform string to format: {UnityVersion}::{OmiLAXR.{module}::{ComposerType}.{Composer}::{XRSDKVersion}. Example: "UnityWindowsEditorv2022.3.62f2::OmiLAXR.xAPIv2.1.1::Other.FacialComposer::MetaXRv1.110.0" - Enabled arrays as values for extensions. UiComposer - Added "Pointed" to InteractableComposer to react on point interactions - Added hover and press duration - Added presses in hover count and total presses. AreaComposer - "actor entered/exited area/room" statement Stress Composer - "actor stressed/relaxed/increased/decreased/updated stress" 📏 Minor changes Menu Items - Added OmiLAXR / xAPI / Copy 'xapi' folder from Samples - Added OmiLAXR / xAPI / Copy 'xAPI.Registry' folder from Samples - Added OmiLAXR / xAPI / Copy 'xapi.types.json' folder from Samples Samples - Added xapi.types.json (see more details in xAPI4Unity v2.2.1. See more details in: - https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr.xapi/-/merge_requests/15/diffs

· Ser.Ragnar

OmiLAXR v2.2.0

🔧 Fixes - [Windows] Fixed Uri issues when using Flatten CSV. - Fixed IOException: Sharing violation on path in when using multiple OmiLAXR instances. 🚀 Features Area Detection - Components Area and Room can be used to detect a specific area, defined by Collider. It triggers OnEnter and OnLeave events. - Added a AreaTrackingBehaviour handling both. Schedulers - They can define the lifecycle of a ScheduledTrackingBehaviour (new). This way you can decide the lifecycle of your tracking behaviour via drag'n'drop. - Existing default: Realtime, Interval, Timeout. - Added ScheduledTrackingBehaviour for framing a TB into a specific selected life cycle. - Global scheduler is by default RealtimeScheduler (Unity Update Cycle). Gaze Tracking (GT) - GazeDetector: Component that sends from owner a ray highly performant to get a GazeHit. - Added an abstract GazeTrackingBehaviour for realizing gaze and fixation events. - It can be used to realize several gaze tracking mechanisms. - The FixationLogic is a replaceable ScriptableObject. - Triggers events OnFixated, OnGazeEntered, OnGazeLeft. - Implemented a <Camera> Gaze Tracking Behaviour handling gaze detection for main camera. Eye Tracking (ET) - Extends Gaze Tracking functionality. - Added EyeCalibrator abstract class to implement own ET calibration. - Several structs for eye or gaze data as SDK independent value. - Added an abstract EyeGazeTrackingBehaviour - Exchangable Saccade and Pursuit logic (see Fixation). - Triggers events of GT and OnSaccaded and OnPursuit (for left, right or both). - Using two GazeDetector representing the eyes. Disclaimer: This feature is signed as beta as it will be evaluated in upcoming research project in practise. These features were tested with Oculus QuestPro and MetaXR Module - but should work also for other devices and SDKs the same. Facial Tracking - Added an abstract FacialTrackingBehaviour to handle face data. - Detected emotions are also defined by exchangeable ScriptableObjects. Thus, own emotions can be easily extended. - Implemented emotions based on Facial Action Coding System: Anger, Disgust, Emotion, Fear, Happiness, Sadness, Smile, Surprise. Disclaimer: This feature is signed as alpha and proof of concept. No evaluation was made so far. Heart Rate - Added first approach of Heart Rate Variance. InteractableTrackingBehavior - Added OnPointed event. UiTrackingBehaviour - Added PressStart, PressEnd, HoverStart, HoverEnd events to TB. 📏 Minor changes - Minor optimizations - Added SdkProvider for providing SDK information to the data. - Added some common types (Frustum, Duration, ...). See more details in: - https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr/-/merge_requests/17/diffs

· Ser.Ragnar

xAPI4Unity v2.2.3

🚀 Features - Enabled arrays as values for extensions. - Made compatible for Unity 2020.

· Ser.Ragnar

Important Unity Updates

Unity has big security issues: https://www.gamepressure.com/newsroom/a-critical-security-flaw-in-unity-was-discovered-after-8-years-it/z686ec Check your Projects and upgrade to an patched version. They have published patches for all versions above Unity 2019. https://unity.com/releases/editor/archive Greetings:)

· Sergej.Goerzen

OmiLAXR v2.1.2

🔧 Fixes - Made GetHeartRate() virtual to make it backwarts compatible for Heart Rate modules. OmiLAXR.xAPI v2.1.2 🔧 Fixes - StressLevelComposer has missing xApiComposer class. - Even using stmt.WithRef(refStmt) and using stmt.WithDuration(duration) the data was not applied to xAPI statement. xAPI4Unity v2.2.2 🚀 Features - Cached pre-compiled Regex Pattern and reused them, instead of creating multiple of the same pattern. - Added variables to xapi.config.json. This way patterns or multiple types can be stored in a variable and be used inside the config multiple times. Example "variables": { "iso8601": "/^P(?:(\\\\d+)Y)?(?:(\\\\d+)M)?(?:(\\\\d+)W)?(?:(\\\\d+)D)?(?:T(?:(\\\\d+)H)?(?:(\\\\d+)M)?(?:(\\\\d+)S)?)?$/\"", "position": "vec2 | vec3 | (int,int) | (int,int,int) | (float, float) | (float, float, float)" }, "types": { ... "generic/extensions/activity/position": "str | ${position}", "eyeTracking/extensions/result/blinkDuration": "OmiLAXR.Types.Duration | ${iso8601}", ... OmiLAXR v.2.2.0 and OmiLAXR.MetaXR: Announcement The version is finalized and currently in review. As soon it passes the review it will be released. We aim to release it until this friday!

· Ser.Ragnar

xAPI4Unity v2.2.1

🚀 Features Strict Typing for xAPI Extensions You can now define strict types for your xAPI extension fields by placing a {def_folder}.config.json file (e.g., xapi.config.json) next to your definitions folder {def_folder} (e.g., xapi). Highlights: - Custom Types You can reference any available Unity C# assembly type, including your own serializable types. Be sure to include the name of your Assembly Definition in the references field (see example with "OmiLAXR" 🖼️)). - Type Aliases Several commonly used types have predefined aliases for convenience: - str → string - vec3 → Vector3 or UnityEngine.Vector3 - ...and many more - Pattern Matching (Regex) You can validate strings using regular expressions. To define a regex pattern, wrap it in slashes (/pattern/). Example: blinkDuration accepts only strings that match the ISO 8601 duration format using /^PT(?:(\d+(?:\.\d+)?)S)$/. - Range Validation Define acceptable value ranges using the following syntax: type[min, max]. Use [] for inclusive bounds and () for exclusive bounds. Examples: - int[0, 3] → Integer values between 0 and 3 (inclusive) - float(0, 5] → Float values greater than 0 and up to 5 (inclusive) Transformation Config You can now exclude specific xAPI definition contexts from global transformations by specifying them in the ignoredContexts field. Configuration Example see 🖼️ Behavior and Examples - generic/extensions/activity/color is mapped to UnityEngine.Color. - virtualReality/extensions/activity/vrObjectName strictly accepts a string. - You can define Vector3 values in various ways (e.g., for position, rotation, scale). - rotation also demonstrates how to define arrays. Instead of multidimensional arrays (int[,]), jagged arrays (int[][]) are also supported. - Nullable types can be defined using ?, e.g., float?. - triangle is treated as a tuple of three UnityEngine.Vector3 values. - fixationDuration and blinkDuration are cast to the custom OmiLAXR.Types.Duration type, which only accepts ISO 8601 durations like "PT0.23S" (230 ms) or "PT1.5S" (1.5 seconds). - If no type is defined for a path, it defaults to object. 📏 Minor Changes - UX improvements - Added code comments, citation file, and general documentation updates

· Ser.Ragnar

OmiLAXR.xAPI v2.1.1

🔧 Fixes - LearningRecordStore was fixed for WebGL. It is compatible, now. - Added Handler to generate xAPI-Statements for OnReleasedAnyButton to InputSystemComposer - Correct platform version. - Made actor ended game statement more reliable. 🚀 Features - Changed platform information to "OmiLAXR.{module}:{composerGroup}.{composerName}:v{version}:{Application.platform}" - Assigned all composers to a group. 📏 Minor changes - Added License information to each file. - Added doc <summary> to each file, field and function. Added more code comments. - Added Pipeline Delegates for richer events. Postponed - Interaction Timings: Delivering measures like duration in xAPI statements how long an actor has pressed or interaction with an object or UI element. See more details in: Merge Request 16

· Ser.Ragnar

OmiLAXR v2.1.1

🔧 Fixes - StatementPrinter now works for WebGL. - Added OnReleasedAnyButton event to InputSystemTrackingBehaviour. - Asset view refreshes automatically after using Create '...' file menu. - Fixed Pipeline.GetAll() return type to Pipeline[]. 🚀 Features - Stress Level - StressLevelTrackingBehaviour. - StressLevelProvider aggregates multiple IStressInputProvider sources (e.g. HeartRateProvider, future FacialExpression, or custom). - Example: StressLevelEstimator. - Statement References - Composer.StoreStatement(string key, IStatement statement) and RestoreStatement(string key) allow reusing stored statements (e.g. for references). - AsyncEndpoint - Use async/await in endpoints by inheriting from AsyncEndpoint. - Override HandleSendingAsync or HandleSendingBatchAsync. - Bearer Auth Endpoint - BearerEndpoint (based on AsyncEndpoint) using bearer tokens. - Unified Auth Workflow - AuthLoader<TEndpoint, TConfig> auto-configures authentication. - WebGL: check (1) ?{filename}=https://... for remote JSON config, (2) parse URL query (endpoint and token), (3) Application.streamingAssetsPath. - Non-Web: check (1) command-line args, (2) {filename}.json near executable, (3) Application.persistentDataPath, (4) Application.streamingAssetsPath. - Uses first valid source; reduces boilerplate and unifies credential injection. - Includes BearerAuthLoader and BasicAuthCredentialsLoader. - Web Compatibility - Threads can be disabled via useThreads = false or define OMILAXR_THREADS_DISABLED. - On WebGL, threads are disabled by default. - WebEndpoint utilities for browser. - AsyncEndpoint supports UnityWebRequests. - Composer Group - Added virtual ComposerGroup GetGroup() => ComposerGroup.Other. - Groups composers by enum values (Other, System, Attention, Movement, Environment, Ppm). 📏 Minor Changes - Added XML <summary> comments. - Menu: OmiLAXR / Create 'bearer.json' file creates file in StreamingAssets. - License header added to each file. - Pipeline.OnQuit event and TrackingBehaviour.OnQuitPipeline method. - OnAppQuit added to pipeline components; shutdown order managed by ApplicationShutdownManager via ShutdownOrder attribute. - Endpoints configurable via Consume(MapData config) and retrievable via Provide(). - Description is collapsible. Details: Merge Request 20

· Sergej.Goerzen

Roadmap August 2025

We are currently working on multiple features and improvements in parallel. But this is why I want to spoiler the planned releases for the upcoming month 🙂 OmiLAXR v2.1.1 (Until Mid August 2025) - StressLevelTrackingBehaviour: You will be able to add modular factors to influence the stress events (increased/reduces stress level). This can be, for example, the heart rate value with weight in combination with your custom script with a specific weight. - Better Web Compatibility: - It will be able to disable threads in endpoints. This will be by default for web. - Some basic web endpoints. - StatementRef Support: StatementRef ist already integrated. But we will add a feature inside of composers to store and restore statement ids that it will be more easy to reference from one statement to another. This is usefull for example, if you reference in statement B (onLeave) to statement A (onEnter). OmiLAXR.xAPI v2.1.1 (Until Mid August 2025) - Interaction Timings: Delivering measures like duration in xAPI statements how long an actor has pressed or interaction with an object or UI element. - Stress Level Statement: Of course standardized xAPI statements for stress level. OmiLAXR / OmiLAXR.xAPI v2.2.0 (End of August 2025) - Eye Tracking: Standardized eye tracking features and statements. Including modular logic for fixation, blinking etc. OmiLAXR.MetaXR v1.0.0 (End of August 2025) - It requires v2.2.0 of - Compatible with OVR and OpenXR implementations - Different kind of interactions (grabbing, controller, eye tracking ...) - be surpised 😉 OmiLAXR.ViveSR (End of August 2025) - Uses Eye Tracking of v2.2.0 and ViveSR SDK. Greetings!

· Ser.Ragnar

OmiLAXR.xAPI v2.1.0

🔧 Fixes - (Critical) Fixed infinite loop in big projects on install - Improved Unity Editor performance and compatibilities. - Endpoint is started even enabled=false. 🚀 Features - xApiStatement - Added .GetResultValue<T>(string key), .GetContextValue<T>(string key) and .GetExtensionValue<T>(string key) to xApiStatement to fetch values (see 🖼️). - Added WithValue(xAPI_Extensions extensions) and GetValue<T>(xAPI_Definition definition, T defaultValue = null) to get or set values in xAPI statement. It can be activity, result or context. See example in todo screenshots. - Implemented ToCsvFormat(bool flatten). - Added more fields according xAPI Specification - WithInteractionType(InteractionType) to define the interaction type of the activitity (see https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#interaction-types). - WithCorrectResponses(params string[] | List<string>) to define possible correct responses (see https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#correct-responses-pattern). - WithRef(Guid guid) for referencing in statements another statements (see https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#statement-references). - WithDuration(TimeSpan duration) define the duration how long the actvitiy took (see https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#245-result). - Endpoints - See OmiLAXRv2.1.0 notes. - Hooks - Added Hooks for pseudonymization and anonymization purposes of the timestamp of statements: - ReferenceTimestampPseudonmizerHook: Replaces the day by a selected referenceDateTime. Time will be by default 00:00:00.000, except you set Keep original time true. - TimestampPseudonymierHook: Shift the day by an hour offset (default 10 days ago) for pseudonym. purposes of the timestamp. - TimestampAnonymierHook: Shift the day by an random hour offset. - Added to platform information about which composer generated the statement and added module. E.g. OmiLAXR.xAPI:TransformComposer:v2.0.19:OSXEditor. 📏 Minor changes - StatementPrinter is enabled by default. - Learning Record Store and BasicAuthCredentialsFileLoader disabled by default. - LocalFileEndpoint was added to Prefab. - Better mechanisms for missing xapi registry - Mouse and Keyboard composer are disabled by default. - Removed IStatement.SetComposer(IComposer) function. - Moved Statement Uri to Composers, derived by xApiRegistry (defined in DataProvider root). You can define now, new uris per composer if needed. - Renamed xApiStatement.ActorRole to xApiStatement.Builder. - The property id is now already generated in OmiLAXR, not on servers. - Added Duration to Teleport Statements. 🧩 Samples From now on OmiLAXR is holding Samples. You can find them in Window / Package Manager / OmiLAXR.xAPI / Samples (see 🖼️) - Added xapi definitions files used in this version into Package Samples. - Added xAPI.Registry used in this version into Package Samples. - Added PositionDataCsvEndpoint as example of Endpoint Examples to show, how to create a very lightweight CSV file using OmiLAXR Endpoints without using the provided CsvEndpoint. - Added CsvFileExampleEndpoint as example of Endpoint Examples to show, how to use helper class CsvFile. See more details in: https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr.xapi/-/merge_requests/14

· Ser.Ragnar

OmiLAXR v2.1.0

🔧 Fixes - Fixed: TransformWatcher threshold check. - Fixed: Composers are not taking multiple tracking behaviours. - Changed wrong version in context information - Fixed: UI changes triggered even user is not interacting (e.g. slider in videos). - Removed BeforeStoppedPipeline errors. - Optimized Pipeline lifecycle. 🚀 Features - Utils - Added CsvFormat to manage CSV structures in memory. - Added CsvFile for improved CSV write operations. - Added Scheduler to implement own scheduled ticker. By default two were implemented: IntervalTicker and TimeoutTicker. - Inside of Tracking Behaviour you can create and call them by SetTimeout(Action, float seconds) and SetInterval(Action, float seconds) functions (see 🖼️). - Added InteractionEventHandler component to detect OnPress, OnRelease, OnHover, OnUnhoverinteractions. Tracking Behaviours and Composers are already planned. - Listeners - Added global threshold properties of TransformWatcherto Main <Camera> Transform Listener - Tracking Behaviours - Added HeartRateTrackingBehaviour using SetInterval, (see 🖼️). Composer is already planned. - Added Options to TransformTrackingBehaviour - interval options to setup transform intervalled events - a flag detectOnChange to decide whether delta change trigger events, (see 🖼️). - ignore property to decide what transform dimension is ignored, (see 🖼️). - Added TrackingBehaviourEvent.Bind() also for Action<T>. Needed to be improved. - Added Hand information to TeleportationTrackingBehaviour and InteractableTrackingBehaviour. - Endpoints - Improved overall performance by using batches. - Use HandleSending(List<IStatement> batch). Batch size can be adjusted by overwriting MaxBatchSize field. - Improved LocalFileEndpoint - highly performant and buffered in background handling batch writes of xAPI statements using BufferedUtf8Writer. - Named LocalFileEndpoint as (JSON) File Endpoint (instead of .txt it creates .jsonl), now. - A statements folder can be definied, now. (see screenshot 🖼️) - Default Folder can be defined. In Custom a folder can be browsed in UnityEditor. - It can create create one file per Composer when oneFilePerComposer=true (see 🖼️). - Added a formatable identifier for filename, or folder name (if splitting by composers) (see🖼️). - Possibility to overwrite the format of each line by overwriting the method FormatLine(IStatement). - More PrintStatement types. - Added FlushQueue(). - Created CsvLocalFileEndpoint for logging CSV files. - Its based on LocalFileEndpoint and sharing its functionalities. - The CSV header can be made flat by setting flatten=true. - You are not loosing any statement information using this option. ⚠️ Deprecation warning Composers<T> handles multiple TrackingBehaviours, now. - Use SendStatement(ITrackingBehaviour statementOwner, IStatement statement) instead of SendStatement(IStatement, bool) if you want to use one composer for multiple matching tracking behaviours (see 🖼️) . If not you can stay with your solution. 📏 Minor changes - Default prefab changes. - LocalFileEndpoint was added to Prefab. - Better mechanisms for missing xapi registry. - Improved LocalFileEndpoint UI, (see 🖼️). - Mouse and Keyboard composer are disabled by default. - Made ObjectlessTrackingBehaviour obselete. Use TrackingBehaviour instead. - Added <T> to Endpoints. - Added Recorded Statementspreview to Endpoints, (see 🖼️). - Added preview for Pipeline and DataProvider holding their pipeline components, (see 🖼️). See more details in: https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr/-/merge_requests/16

· Sergej.Goerzen

xAPI4Unity v2.2.0 (Recommended!)

🚀 Features - The window is opening on startup, now if no xAPI registry is set. - You can export your registry as .unitypackage now. This can be used e.g. to share or reuse in other projects. Go to xAPI4Unity / Export .unitypackage in menu (see screenshot). - Added Create folder to xAPI Definitions Editor. - Added mark for unsaved changed files. - Added xAPI Conflict Resolver to resolve conflicts between new definitions of remote and your local (see screenshot). - It is now possible to define an own repository and branch in fetcher settings (see screenshot). 📏 Minor changes - Resolved some compatibility issues. - Removed some obselete warnings. - Improved UI - Smaller fixes - New menu entries (see screenshot). - Added version history to CHANGELOG.md. See more details in: https://gitlab.com/learntech-rwth/omilaxr-ecosystem/xapi-4-unity/-/merge_requests/6

· Sergej.Goerzen

Updates Notes for OmiLAXR and OmiLAXR.xAPI v2.0.18

Changes (need for action expected) - Renamed "EventTrackingBehaviour" into "ObjectlessTrackingBehaviour" as it has name confusions with "TrackingBehaviourEvent" - what is used for events. - Made existing Tracking Behaviours better overwriteables (made methods protected and virtual) in case you want to adapt them by a subclass. - Made finally compatible for Unity >=2020.3.15f (it is now visible in Package Manager for Unity 2020) Need for action - Only if your project throws erros, check if one of your Tracking Behaviours extends "EventTrackingBehaviour" and rename it to "ObjectlessTrackingBehaviour" (do not confuse this with "TrackingBehaviourEvent" you are using for events!) See https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr/-/merge_requests/13

· Sergej.Goerzen

Update Notes for xAPI4Unity 2.1.10

Bugfixes - Fixes issues with detection of default Assets folder - Removed shared SettingsKey that it used. Multiple projects shared the same assets folder. Smaller Changes - Increased default height of window. - Improved compatibility for older unity versions - QuickFetch when click Save in xAPI Definitions Editor

· Sergej.Goerzen

Release Notes for OmiLAXR.UnityXR v1.0.0

The first version of OmiLAXR.UnityXR was released! Now, you have the possibility to plug and play following components. More will come in future. It can be included either as full own prefab OmiLAXR.UnitXR (full) (than you have to replace OmiLAXR prefab) or you can simply use the PipelineExtension mechanism and drag OmiLAXR.Unity prefab into the scene without removing anything else. Listeners - LocomotionListener: Provides all <LocomotionMediator> components to pipeline. - TeleportationListener: Provides all <TeleportationProvider>, <BaseTeleportationInteractable> (<TeleportationAnchor>, <TeleportationArea>) components to pipeline. - XRBaseInteractbaleListener: Provides all <XRBaseInteractable> components to pipeline. - XROriginListener: Provides all <XROrigin> components to pipeline. Tracking Behaviours - UnityXRTeleportationTrackingBehaviour: Tracks teleportation events of <TeleportationProvider>, <TeleportationArea> and <TeleportationAnchor> components. - XRBaseInteractableTrackingBehaviour: A <InteractableTrackingBehaviour> for tracking XR controllers by using <XRBaseInteractable> components.

· Sergej.Goerzen

Updates Notes for xAPI4Unity 2.1.8-2.1.9

New features - Added "Edit xAPI Definitions" Window - Watching xAPI.Registry and (un)set XAPI_REGISTRY_EXISTS scripting define symbol based on existence Smaller changes - Improved UI/UX - catched issues if xAPI registry files have wrong structure in extensions. Ignore wrong files. Bugfixes - made unity 2020 compatible again

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.13 - v.2.0.17

New features - Added InputSystemTrackingBehaviour, TeleportationTrackingBehaviour - Generalized stuff for preparing for OmiLAXR.UnityXR - Added SessionManager, SessionTrackingBehaviour and SessionComposer to manage if a tracking session (pipeline) starts or end for an actor Smaller changes - Setting InputSystem Both is not needed anymore. - Reorganized prefabs folder - Remove error if installed in wrong order. Now, the order doesn't matter anymore. Bugfixes - LrsCredentialsLoader is not starting anymore if it is disabled

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v.2.0.12

Smaller Changes - Added LICENSE - Removed Newtonsoft.JSON dependency from package.json - made OnEnable() in TrackingBehaviour virtual Update Notes for OmiLAXR.HypeRate v.1.0.2 Bugfixes - Small fix: Error thrown if disabled and quit application Smaller Changes - Added LICENSE - Removed Newtonsoft.JSON dependency from package.json Update Notes for xAPI4Unity v2.1.7 Smaller Changes - Settings are saving automatically. - Removed save button - Option 1 sets the path automatically to Assets folder in project. News UnityXR module was implemented and published in beta version. More details are following in the #channel section.

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v.2.0.11

Bugfixes - fixed path of example.credentials.json New features - Added [Global Settings] component to OmiLAXR prefab - with obj.GetTrackingName() you have also the possibility to use path name instead of only using object name. To enable this choose this option in [Global Settings] component. xAPI - none Smaller Changes - LocalEndpoint has now the possiblity to choose between persistantDataPath, tempPath or a custom path for storing statements Need for action - none

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.9

Bugfixes - improved considering enabled property in pipeline components - fixed HigherComposer has no SendStatement method New features - Added ActorDataProvider for holding global data for selected actors (e.g. result data for heart rate). - Method Detect<T> in Tracking behaviours uses FindObjectsOfType<T> and provides directly to Found(objects) - AutoListener<T> class can be used as base class to automatically apply Detect<T> function thus StartListening() is not needed - Added further Bind function to TrackingBehaviorEventwith a default invoker. Thus a short notation is possible, e.g. OnClickedButton.Bind(button.onClick, this, button). - HeartRateMonitor for extending context with heart rate value. It needs a HeartRateProvider (an ActorDataProvider) as input. You can use any heart rate framework you want - you need just extend this class and override int GetHeartRate(). - Simulator classes as examples HeartRateSimulator - Component ExcludeFromTracking and a filter for these components to exclude explicit game objects that have this component. - Added menu item OmiLAXR / Create credentials.json file to create a credentials file in StreamingAssets. xAPI (Need for action expected) - Heart rate as result extension for each actor pipeline holding HeartRateProvider Smaller Changes - Renamed protected pipeline to public Pipeline. Just rename if you are issued. - Ensured compatbility for Unity 2020, 2021, 2022, 2023 and 6 (6000) Need for action Check on errors if you need to action - (All): You need to ensure you have the newest xAPI Registry JSON files (look in https://gitlab.com/learntech-rwth/xapi/-/merge_requests/43/diffs). Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.10 Bugfixes - Fixed errors for Unity 2021 New features - None xAPI - None Smaller Changes - Updated readmes Need for action - None

· Sergej.Goerzen

Update Notes for xAPI4Unity v2.1.6

Bugfixes - None New features - Added as Option 1 the possibility to download and extract xAPI Registry from gitlab directly to assets folder. - Ensured compatibility for Unity 2020, 2021, 2022 and Unity 6 Smaller Changes - Option 1 is now Option 2 - Option 2 is now Option 3 - Updated readme - Renamed Menu Items - Smaller internal code optimizations Need for action - None

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.8

Bugfixes - only enabled pipeline components are used - Select<T> is not working for all - Unbound OnFoundObjects events on pipeline stop New features - LocalEndpoint to store statements locally - FPS Monitor Component - [ReadOnly]-Attribute for Inspector properties - Added ITrackingBehaviour, EventTrackingBehaviour, ObjectTrackingBehaviour and TrackingBehaviour<T> for strict objects type in Tracking Behaviour (no breaking changes) - A description is now displayed in Inspector for pipeline components by using [Description("...")] xAPI (Need for action expected) - FPS value as statement context - Instructor for a Pipeline - Registration UUID in statement context - actor scrolled mousewith scrollValue - actor focused/unfocused game - fixed actor started game - uiElementOptions as activity extension (e.g. in dropdown) Smaller Changes - Deleted xApiStatementBuilder and LocalFallback. - Removed Instructor and Team Component from OmiLAXR.xAPI prefab. - Renamed Actor in Learner Pipeline by default to "Learner" - Removed SceneGameObjectsListener from "System Pipeline". Instead used GameStateWatcherListener. - Capitalized onFoundObjects event. Need for action Check on errors if you need to action - (All): You need to ensure you have the newest xAPI Registry JSON files (look in https://gitlab.com/learntech-rwth/xapi/-/merge_requests/42/diffs). - (If you want strict type in your TrackingBehaviour AfterFilteredObjects): Add <YourType> to class YourClass : TrackingBehaviour<YourType> and replace Object[] objects by (YourType[] objects) in AfterFilteredObjects. After that Select is applied automatically right before and is not needed anymore. -(If you do not use AfterFilteredObjects in your class): Extend from EventTrackingBehaviour instead of TrackingBehaviour. It makes the method not mandatory anymore.

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.7

Bugfixes - Fixed "System started Game" statement New components, functions & features - Custom timestamp by WithTimestamp(DateTime timestamp) to xApiStatement - Dispatch(Action action) function to Endpoint to dispatch functions in main thread. -SendImmediate function to endpoint for sending "high priority" statements without using queue system. - StatementPrinter endpoint to OmiLAXR Data Provider prefab (disabled per default) xAPI - Scene name to Context - Tracking for UI elements: Toggle, Scrollbar, TextField, TextFieldTMP - "System (paused/resumed) Game" statement Smaller Changes - Changed Inspector Menu Paths for some components - Added UnityComponentFilter to LearnerPipeline prefab by default - System start, pause, resumed and quit statements are sent immediatly - Made Found(Object[] objects) in Listener compatible with only one object. It is not needed to provide an array anymore if you need it for only one object (e.g. Found(Main.camera.gameObject)). - Added enabled Checkbox to BasicAuthFileLoader, TrackingBehaviour, Listener, . Need for action Warning: There will be Unity errors after Update. Check if you need to action - (If you are using affected events) Capizatilized some event names. Just adjust the names. - (All) Added IComposer to remove BindedComposer. Thus, GetAuthor() need to be changed from protected to public. - (If you are using AfterComposed): AfterComposed has one more property (bool immediate) - (If you override TranferStatement): We renamed in Endpoint the TransferStatement() to HandleQueue(). But a "TransferStatement" do still exist for other purpose.

· Sergej.Goerzen

Update Notes xAPI4Unity v2.1.3

- cleaned up unneeded code. Compilation time increased a bit. (unnoticeable stuff) - Removed Designer Window (never finished, not needed) - improved ToString() of xAPI_Extensions

· Ser.Ragnar

xapi v2.0.0

🚀 Features

  • The xAPI Registry has a new home on GitHub Pages. It is deployed straight from the repository OmiLAXR-Ecosystem/xapi, so it no longer depends on a self-hosted server and stays reliably available.
  • The new website has full-text search, definition history, and German/English language support.
  • Added shareable definition lists with JSON/CSV export and direct JSON access to all definitions.
  • Added automatic definition validation and contribution guides in German and English.

🔧 Fixed

  • Corrected English names and descriptions across 86 definitions.

⚠️ Breaking Changes

  • Changed the registry IRI base to https://omilaxr-ecosystem.github.io/xapi/. Every definition lists its former IRI as exactMatch, so older LRS data can be mapped. OmiLAXR.xAPI 2.2.5 (will be release in the next days) switches to the new base automatically.
  • Moved media/extensions/duration to media/extensions/activity/duration, so it is now included in generated Unity registries. Update references to this extension.

· Ser.Ragnar

xAPI4Unity v2.3.0

🚀 Features

  • Added a guided setup wizard for downloading definitions, generating the registry, validating configuration, and exporting .unitypackage files. It replaces the Setup xAPI definitions window.
  • Redesigned the definitions editor in the style of the new wizard: a searchable tree of contexts, verbs, activities and extensions, and a detail view with the registry IRI, checks for missing names and descriptions, multilingual editing, exactMatch support and a raw JSON view.
  • New definitions can be created right in the editor and show their path and IRI before the file is created. Save with Ctrl/Cmd+S or "Save all"; unsaved edits survive script reloads.
  • Migrated the default definitions source to GitHub and updated registry links to the new website. Legacy source settings are migrated automatically.

🔧 Fixed

  • Fixed definition downloads from GitHub and pulling updates for Git-cloned definitions.
  • Fixed duplicate registry generation when saving definitions.
  • Removed nullable annotation warnings from the editor and generated registries.
  • Improved readability in the light editor theme, fixed dropdown selection, and newly created configuration files now appear immediately in the Project window.

· Sergej.Goerzen

OmiLAXR v2.2.4

🚀 Features

  • Added support for Unity >6.5.

🔧 Fixed

  • Replaced deprecated Unity APIs with Unity 6.5-compatible alternatives (GetEntityId, FindAnyObjectByType, updated FindObjectsByType usage).
  • Removed compiler warnings and deprecations across pipeline, team, and tracking behaviour internals.

OmiLAXR.xAPI v2.2.4

🔧 Fixed

  • Fixed Unity Package Manager installation errors caused by xapi.config.json being registered as a file sample instead of a sample directory.
  • Fixed the sample copier path for xapi.config.json.

· Ser.Ragnar

OmiLAXR v2.2.3

🚀 Features

  • Improved endpoint sending stability and throughput (multi-threading refactor in Endpoint).
  • Improved scheduler behavior and runtime efficiency (Scheduler, IntervalTicker).
  • Improved tracking performance (TransformWatcher, TransformTrackingBehaviour, pipeline prefabs).
  • Updated package version metadata.

🔧 Fixed

  • Added safeguards against invalid/null statements in LocalFileEndpoint.
  • Fixed Frustum behavior related to issue #17.

OmiLAXR.xAPI v2.2.3

🚀 Features

  • Added ExampleHigherComposer sample under Samples~/xApiComposers.
  • Improved statement-processing performance in xApiStatement.
  • Updated xAPI extension JSON serialization to preserve typed extension values.
  • Updated package version metadata.

🔧 Fixed

  • Fixed incorrect context version handling in ScenarioContextHook.
  • Removed a broken runtime higher-composer example and stabilized xApiSemanticComposer.

· Ser.Ragnar

OmiLAXR v2.2.2

🚀 Features

  • Added string version to ToDataStandardString(), ToJsonString() and ToCsvFormat() in IStatement.

OmiLAXR.xAPI v2.2.2

🚀 Features

  • Added string version to ToDataStandardString(), ToJsonString() and ToCsvFormat() in IStatement.

🔧 Fixes

  • Fixed issue that Learning Record Store still sends statements by default with version 2.0.0.

· Ser.Ragnar

OmiLAXR v2.2.1

🚀 Features

  • Added virtual (overridable) IncludeInactive property to AutoListener&lt;T>. This way future game objects can be consided. By default its true. Please write protected override bool IncludeInactive => false; if you wish to disable it and only look for active game objects. ❗

🔧 Fixes

  • Fixed error that is thrown when CSV files of (CSV) File Endpoint flushes.
  • Removed some warnings

OmiLAXR.xAPI v2.2.1

🔧 Fixes

  • xAPI version change did not affect. It was always v2.0.0. Now, it is 1.0.3 by default and the change is taken.
  • Removed some warnings

· Ser.Ragnar

OmiLAXR.UnityXR (OpenXR) v1.1.0

Changes

  • Made OmiLAXR v2.2.0 compatible.

· Ser.Ragnar

Release Notes for OmiLAXR.MetaXR v1.0.0

🚀 Features

  • Added MetaXRTeleportListener and MetaXRTeleportationTrackingBehaviour for Oculus.Interaction.Locomotion.TeleportInteractor
  • Added MetaXRInteractableUnityEventWrapperListener and MetaXRInteractableUnityEventWrapperTrackingBehaviour for Oculus.Interaction.InteractableUnityEventWrapper
  • Added MetaXRGrabInteractableListener and MetaXRGrabInteractableTrackingBehaviour for Oculus.Interaction.GrabInteractable
  • Added MetaXRHandGrabInteractableListener and MetaXRGrabInteractableTrackingBehaviour for Oculus.Interaction.HandGrabInteractable
  • Added MetaXRPointableUnityEventWrapperListener and MetaXRPointableUnityEventWrapperTrackingBehaviour for Oculus.Interaction.PointableUnityEventWrapper
  • Added MetaXRRayInteractableListener and MetaXRRayInteractableTrackingBehaviour for Oculus.Interaction.RayInteractable
  • Added MetaXROVRHandTransformListener for Oculus.VR.OVRHand using OmiLAXR's TransformTrackingBehaviour
  • Added MetaXROVREyeGazeListener for Oculus.VR.OVREyeGaze using OmiLAXR's TransformTrackingBehaviour
  • Added MetaXROVRInputTrackingBehaviour for OVRInput

Requirements

  • OmiLAXR v2.2.0
  • OmiLAXR.xAPI v2.2.0

Credits

Special thanks to @Marc to implementing this package.

· Ser.Ragnar

OmiLAXR.xAPI v2.2.0 ❗BREAKING CHANGES❗

HOW TO INSTALL

  1. Update xAPI4Unity Package.
  2. Backup your Assets/xapi folder as a copy. You can keep your folder and patch a new version into yours.
  3. Click on xAPI4Unity / Download newest 'xapi' patch into mine.
  4. Click on xAPI4Unity / Update xAPI.Registry.
  5. Update OmiLAXR Packages.

🚀 Features

TinCan.dll

  • Updated TinCan.NET Library to own Fork: https://github.com/SGoerzen/TinCan.NET
  • Advantages: development in direction of xAPI 2.0
  • Added attachments
  • Improved some URI consistencies.
  • Updated Newtonsoft from v8 to v13.

Strict types in xAPI Extensions

  1. To use them click on Menu OmiLAXR / Samples / Copy 'xapi.config.json'.
  2. Rebuild your xAPI.Registry with xAPI4Unity.

** Eye Tracking **

Facial Tracking

  • "actor changed face"
  • "actor expressed emotion"

** xAPI**

  • Improved building UX. "actor", "Does" and "Activity" are required to create a statement.
  • Prepared for xAPI 2.0.0. By default: 1.0.3 is still selected. You can switch the version in xAPI Registry component.
  • Added xAPI Attachments.
  • A lot of new definitions. See:
    https://gitlab.com/learntech-rwth/xapi/-/merge_requests/54/diffs
  • Updated xAPI platform string to format: {UnityVersion}::{OmiLAXR.{module}::{ComposerType}.{Composer}::{XRSDKVersion}. Example: "UnityWindowsEditorv2022.3.62f2::OmiLAXR.xAPIv2.1.1::Other.FacialComposer::MetaXRv1.110.0"
  • Enabled arrays as values for extensions.

UiComposer

  • Added "Pointed" to InteractableComposer to react on point interactions
  • Added hover and press duration
  • Added presses in hover count and total presses.

AreaComposer

  • "actor entered/exited area/room" statement

Stress Composer

  • "actor stressed/relaxed/increased/decreased/updated stress"

📏 Minor changes

** Menu Items **

  • Added OmiLAXR / xAPI / Copy 'xapi' folder from Samples
  • Added OmiLAXR / xAPI / Copy 'xAPI.Registry' folder from Samples
  • Added OmiLAXR / xAPI / Copy 'xapi.types.json' folder from Samples
    ** Samples **
  • Added xapi.types.json (see more details in xAPI4Unity v2.2.1.

See more details in:

· Ser.Ragnar

OmiLAXR v2.2.0

🔧 Fixes

  • [Windows] Fixed Uri issues when using Flatten CSV.
  • Fixed IOException: Sharing violation on path in when using multiple OmiLAXR instances.

🚀 Features

** Area Detection **

  • Components Area and Room can be used to detect a specific area, defined by Collider. It triggers OnEnter and OnLeave events.
  • Added a AreaTrackingBehaviour handling both.

Schedulers

  • They can define the lifecycle of a ScheduledTrackingBehaviour (new). This way you can decide the lifecycle of your tracking behaviour via drag'n'drop.
    • Existing default: Realtime, Interval, Timeout.
  • Added ScheduledTrackingBehaviour for framing a TB into a specific selected life cycle.
  • Global scheduler is by default RealtimeScheduler (Unity Update Cycle).

Gaze Tracking (GT)

  • GazeDetector: Component that sends from owner a ray highly performant to get a GazeHit.
  • Added an abstract GazeTrackingBehaviour for realizing gaze and fixation events.
    • It can be used to realize several gaze tracking mechanisms.
    • The FixationLogic is a replaceable ScriptableObject.
    • Triggers events OnFixated, OnGazeEntered, OnGazeLeft.
  • Implemented a &lt;Camera> Gaze Tracking Behaviour handling gaze detection for main camera.

Eye Tracking (ET)

  • Extends Gaze Tracking functionality.
  • Added EyeCalibrator abstract class to implement own ET calibration.
  • Several structs for eye or gaze data as SDK independent value.
  • Added an abstract EyeGazeTrackingBehaviour
    • Exchangable Saccade and Pursuit logic (see Fixation).
    • Triggers events of GT and OnSaccaded and OnPursuit (for left, right or both).
    • Using two GazeDetector representing the eyes.
      Disclaimer: This feature is signed as beta as it will be evaluated in upcoming research project in practise. These features were tested with Oculus QuestPro and MetaXR Module - but should work also for other devices and SDKs the same.

Facial Tracking

  • Added an abstract FacialTrackingBehaviour to handle face data.
  • Detected emotions are also defined by exchangeable ScriptableObjects. Thus, own emotions can be easily extended.
  • Implemented emotions based on Facial Action Coding System: Anger, Disgust, Emotion, Fear, Happiness, Sadness, Smile, Surprise.
    Disclaimer: This feature is signed as alpha and proof of concept. No evaluation was made so far.

Heart Rate

  • Added first approach of Heart Rate Variance.

InteractableTrackingBehavior

  • Added OnPointed event.

UiTrackingBehaviour

  • Added PressStart, PressEnd, HoverStart, HoverEnd events to TB.

📏 Minor changes

  • Minor optimizations
  • Added SdkProvider for providing SDK information to the data.
  • Added some common types (Frustum, Duration, ...).

See more details in:

· Ser.Ragnar

xAPI4Unity v2.2.3

🚀 Features

  • Enabled arrays as values for extensions.
  • Made compatible for Unity 2020.

· Ser.Ragnar

Important Unity Updates

Unity has big security issues: https://www.gamepressure.com/newsroom/a-critical-security-flaw-in-unity-was-discovered-after-8-years-it/z686ec

Check your Projects and upgrade to an patched version. They have published patches for all versions above Unity 2019.

https://unity.com/releases/editor/archive

Greetings:)

· Sergej.Goerzen

OmiLAXR v2.1.2

🔧 Fixes

  • Made GetHeartRate() virtual to make it backwarts compatible for Heart Rate modules.

OmiLAXR.xAPI v2.1.2

🔧 Fixes

  • StressLevelComposer has missing xApiComposer class.
  • Even using stmt.WithRef(refStmt) and using stmt.WithDuration(duration) the data was not applied to xAPI statement.

xAPI4Unity v2.2.2

🚀 Features

  • Cached pre-compiled Regex Pattern and reused them, instead of creating multiple of the same pattern.
  • Added variables to xapi.config.json. This way patterns or multiple types can be stored in a variable and be used inside the config multiple times.

Example

"variables": { "iso8601": "/^P(?:(\\\\d+)Y)?(?:(\\\\d+)M)?(?:(\\\\d+)W)?(?:(\\\\d+)D)?(?:T(?:(\\\\d+)H)?(?:(\\\\d+)M)?(?:(\\\\d+)S)?)?$/\"", "position": "vec2 | vec3 | (int,int) | (int,int,int) | (float, float) | (float, float, float)" }, "types": { ... "generic/extensions/activity/position": "str | ${position}", "eyeTracking/extensions/result/blinkDuration": "OmiLAXR.Types.Duration | ${iso8601}", ...

OmiLAXR v.2.2.0 and OmiLAXR.MetaXR: Announcement

The version is finalized and currently in review. As soon it passes the review it will be released. We aim to release it until this friday!

· Ser.Ragnar

xAPI4Unity v2.2.1

🚀 Features

Strict Typing for xAPI Extensions

You can now define strict types for your xAPI extension fields by placing a {def_folder}.config.json file (e.g., xapi.config.json) next to your definitions folder {def_folder} (e.g., xapi).

Highlights:

  • Custom Types
    You can reference any available Unity C# assembly type, including your own serializable types. Be sure to include the name of your Assembly Definition in the references field (see example with "OmiLAXR" 🖼️)).

  • Type Aliases
    Several commonly used types have predefined aliases for convenience:

    • str → string
    • vec3 → Vector3 or UnityEngine.Vector3
    • ...and many more
  • Pattern Matching (Regex)
    You can validate strings using regular expressions. To define a regex pattern, wrap it in slashes (/pattern/).
    Example: blinkDuration accepts only strings that match the ISO 8601 duration format using /^PT(?:(\d+(?:\.\d+)?)S)$/.

  • Range Validation
    Define acceptable value ranges using the following syntax: type[min, max]. Use [] for inclusive bounds and () for exclusive bounds.
    Examples:

    • int[0, 3] → Integer values between 0 and 3 (inclusive)
    • float(0, 5] → Float values greater than 0 and up to 5 (inclusive)

Transformation Config

You can now exclude specific xAPI definition contexts from global transformations by specifying them in the ignoredContexts field.

Configuration Example see 🖼️

Behavior and Examples

  • generic/extensions/activity/color is mapped to UnityEngine.Color.
  • virtualReality/extensions/activity/vrObjectName strictly accepts a string.
  • You can define Vector3 values in various ways (e.g., for position, rotation, scale).
  • rotation also demonstrates how to define arrays. Instead of multidimensional arrays (int[,]), jagged arrays (int[][]) are also supported.
  • Nullable types can be defined using ?, e.g., float?.
  • triangle is treated as a tuple of three UnityEngine.Vector3 values.
  • fixationDuration and blinkDuration are cast to the custom OmiLAXR.Types.Duration type, which only accepts ISO 8601 durations like "PT0.23S" (230 ms) or "PT1.5S" (1.5 seconds).
  • If no type is defined for a path, it defaults to object.

📏 Minor Changes

  • UX improvements
  • Added code comments, citation file, and general documentation updates

· Ser.Ragnar

OmiLAXR.xAPI v2.1.1

🔧 Fixes

  • LearningRecordStore was fixed for WebGL. It is compatible, now.
  • Added Handler to generate xAPI-Statements for OnReleasedAnyButton to InputSystemComposer
  • Correct platform version.
  • Made actor ended game statement more reliable.

🚀 Features

  • Changed platform information to "OmiLAXR.{module}:{composerGroup}.{composerName}:v{version}:{Application.platform}"
  • Assigned all composers to a group.

📏 Minor changes

  • Added License information to each file.
  • Added doc <summary> to each file, field and function. Added more code comments.
  • Added Pipeline Delegates for richer events.

Postponed

  • Interaction Timings: Delivering measures like duration in xAPI statements how long an actor has pressed or interaction with an object or UI element.

See more details in:
Merge Request 16

· Ser.Ragnar

OmiLAXR v2.1.1

🔧 Fixes

  • StatementPrinter now works for WebGL.
  • Added OnReleasedAnyButton event to InputSystemTrackingBehaviour.
  • Asset view refreshes automatically after using Create '...' file menu.
  • Fixed Pipeline.GetAll() return type to Pipeline[].

🚀 Features

  • Stress Level

    • StressLevelTrackingBehaviour.
    • StressLevelProvider aggregates multiple IStressInputProvider sources (e.g. HeartRateProvider, future FacialExpression, or custom).
    • Example: StressLevelEstimator.
  • Statement References

    • Composer.StoreStatement(string key, IStatement statement) and RestoreStatement(string key) allow reusing stored statements (e.g. for references).
  • AsyncEndpoint

    • Use async/await in endpoints by inheriting from AsyncEndpoint.
    • Override HandleSendingAsync or HandleSendingBatchAsync.
  • Bearer Auth Endpoint

    • BearerEndpoint (based on AsyncEndpoint) using bearer tokens.
  • Unified Auth Workflow

    • AuthLoader&lt;TEndpoint, TConfig> auto-configures authentication.
    • WebGL: check (1) ?{filename}=https://... for remote JSON config, (2) parse URL query (endpoint and token), (3) Application.streamingAssetsPath.
    • Non-Web: check (1) command-line args, (2) {filename}.json near executable, (3) Application.persistentDataPath, (4) Application.streamingAssetsPath.
    • Uses first valid source; reduces boilerplate and unifies credential injection.
    • Includes BearerAuthLoader and BasicAuthCredentialsLoader.
  • Web Compatibility

    • Threads can be disabled via useThreads = false or define OMILAXR_THREADS_DISABLED.
    • On WebGL, threads are disabled by default.
    • WebEndpoint utilities for browser.
    • AsyncEndpoint supports UnityWebRequests.
  • Composer Group

    • Added virtual ComposerGroup GetGroup() => ComposerGroup.Other.
    • Groups composers by enum values (Other, System, Attention, Movement, Environment, Ppm).

📏 Minor Changes

  • Added XML &lt;summary> comments.
  • Menu: OmiLAXR / Create 'bearer.json' file creates file in StreamingAssets.
  • License header added to each file.
  • Pipeline.OnQuit event and TrackingBehaviour.OnQuitPipeline method.
  • OnAppQuit added to pipeline components; shutdown order managed by ApplicationShutdownManager via ShutdownOrder attribute.
  • Endpoints configurable via Consume(MapData config) and retrievable via Provide().
  • Description is collapsible.

Details:
Merge Request 20

· Sergej.Goerzen

Roadmap August 2025

We are currently working on multiple features and improvements in parallel. But this is why I want to spoiler the planned releases for the upcoming month 🙂

OmiLAXR v2.1.1 (Until Mid August 2025)

  • StressLevelTrackingBehaviour: You will be able to add modular factors to influence the stress events (increased/reduces stress level). This can be, for example, the heart rate value with weight in combination with your custom script with a specific weight.
  • Better Web Compatibility:
    • It will be able to disable threads in endpoints. This will be by default for web.
    • Some basic web endpoints.
  • StatementRef Support: StatementRef ist already integrated. But we will add a feature inside of composers to store and restore statement ids that it will be more easy to reference from one statement to another. This is usefull for example, if you reference in statement B (onLeave) to statement A (onEnter).

OmiLAXR.xAPI v2.1.1 (Until Mid August 2025)

  • Interaction Timings: Delivering measures like duration in xAPI statements how long an actor has pressed or interaction with an object or UI element.
  • Stress Level Statement: Of course standardized xAPI statements for stress level.

OmiLAXR / OmiLAXR.xAPI v2.2.0 (End of August 2025)

  • Eye Tracking: Standardized eye tracking features and statements. Including modular logic for fixation, blinking etc.

OmiLAXR.MetaXR v1.0.0 (End of August 2025)

  • It requires v2.2.0 of
  • Compatible with OVR and OpenXR implementations
  • Different kind of interactions (grabbing, controller, eye tracking ...) - be surpised 😉

OmiLAXR.ViveSR (End of August 2025)

  • Uses Eye Tracking of v2.2.0 and ViveSR SDK.

Greetings!

· Ser.Ragnar

OmiLAXR.xAPI v2.1.0

🔧 Fixes

  • (Critical) Fixed infinite loop in big projects on install
  • Improved Unity Editor performance and compatibilities.
  • Endpoint is started even enabled=false.

🚀 Features

  • xApiStatement

  • Endpoints

    • See OmiLAXRv2.1.0 notes.
  • Hooks

  • Added Hooks for pseudonymization and anonymization purposes of the timestamp of statements:

    • ReferenceTimestampPseudonmizerHook: Replaces the day by a selected referenceDateTime. Time will be by default 00:00:00.000, except you set Keep original time true.
    • TimestampPseudonymierHook: Shift the day by an hour offset (default 10 days ago) for pseudonym. purposes of the timestamp.
    • TimestampAnonymierHook: Shift the day by an random hour offset.
    • Added to platform information about which composer generated the statement and added module. E.g. OmiLAXR.xAPI:TransformComposer:v2.0.19:OSXEditor.

📏 Minor changes

  • StatementPrinter is enabled by default.
  • Learning Record Store and BasicAuthCredentialsFileLoader disabled by default.
  • LocalFileEndpoint was added to Prefab.
  • Better mechanisms for missing xapi registry
  • Mouse and Keyboard composer are disabled by default.
  • Removed IStatement.SetComposer(IComposer) function.
  • Moved Statement Uri to Composers, derived by xApiRegistry (defined in DataProvider root). You can define now, new uris per composer if needed.
  • Renamed xApiStatement.ActorRole to xApiStatement.Builder.
  • The property id is now already generated in OmiLAXR, not on servers.
  • Added Duration to Teleport Statements.

🧩 Samples

From now on OmiLAXR is holding Samples. You can find them in Window / Package Manager / OmiLAXR.xAPI / Samples (see 🖼️)

  • Added xapi definitions files used in this version into Package Samples.
  • Added xAPI.Registry used in this version into Package Samples.
  • Added PositionDataCsvEndpoint as example of Endpoint Examples to show, how to create a very lightweight CSV file using OmiLAXR Endpoints without using the provided CsvEndpoint.
  • Added CsvFileExampleEndpoint as example of Endpoint Examples to show, how to use helper class CsvFile.

See more details in:
https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr.xapi/-/merge_requests/14

· Ser.Ragnar

OmiLAXR v2.1.0

🔧 Fixes

  • Fixed: TransformWatcher threshold check.
  • Fixed: Composers are not taking multiple tracking behaviours.
  • Changed wrong version in context information
  • Fixed: UI changes triggered even user is not interacting (e.g. slider in videos).
  • Removed BeforeStoppedPipeline errors.
  • Optimized Pipeline lifecycle.

🚀 Features

  • Utils

    • Added CsvFormat to manage CSV structures in memory.
    • Added CsvFile for improved CSV write operations.
    • Added Scheduler to implement own scheduled ticker. By default two were implemented: IntervalTicker and TimeoutTicker.
      • Inside of Tracking Behaviour you can create and call them by SetTimeout(Action, float seconds) and SetInterval(Action, float seconds) functions (see 🖼️).
    • Added InteractionEventHandler component to detect OnPress, OnRelease, OnHover, OnUnhoverinteractions. Tracking Behaviours and Composers are already planned.
  • Listeners

    • Added global threshold properties of TransformWatcherto Main &lt;Camera> Transform Listener
  • Tracking Behaviours

    • Added HeartRateTrackingBehaviour using SetInterval, (see 🖼️). Composer is already planned.
    • Added Options to TransformTrackingBehaviour
      • interval options to setup transform intervalled events
      • a flag detectOnChange to decide whether delta change trigger events, (see 🖼️).
      • ignore property to decide what transform dimension is ignored, (see 🖼️).
    • Added TrackingBehaviourEvent.Bind() also for Action&lt;T>. Needed to be improved.
    • Added Hand information to TeleportationTrackingBehaviour and InteractableTrackingBehaviour.
  • Endpoints

    • Improved overall performance by using batches.

    • Use HandleSending(List&lt;IStatement> batch). Batch size can be adjusted by overwriting MaxBatchSize field.

    • Improved LocalFileEndpoint

      • highly performant and buffered in background handling batch writes of xAPI statements using BufferedUtf8Writer.
      • Named LocalFileEndpoint as (JSON) File Endpoint (instead of .txt it creates .jsonl), now.
      • A statements folder can be definied, now. (see screenshot 🖼️)
      • Default Folder can be defined. In Custom a folder can be browsed in UnityEditor.
      • It can create create one file per Composer when oneFilePerComposer=true (see 🖼️).
      • Added a formatable identifier for filename, or folder name (if splitting by composers) (see🖼️).
      • Possibility to overwrite the format of each line by overwriting the method FormatLine(IStatement).
      • More PrintStatement types.
    • Added FlushQueue().

    • Created CsvLocalFileEndpoint for logging CSV files.

      • Its based on LocalFileEndpoint and sharing its functionalities.
      • The CSV header can be made flat by setting flatten=true.
      • You are not loosing any statement information using this option.

⚠️ Deprecation warning

Composers&lt;T> handles multiple TrackingBehaviours, now.

  • Use SendStatement(ITrackingBehaviour statementOwner, IStatement statement) instead of SendStatement(IStatement, bool) if you want to use one composer for multiple matching tracking behaviours (see 🖼️) . If not you can stay with your solution.

📏 Minor changes

  • Default prefab changes.
  • LocalFileEndpoint was added to Prefab.
  • Better mechanisms for missing xapi registry.
  • Improved LocalFileEndpoint UI, (see 🖼️).
  • Mouse and Keyboard composer are disabled by default.
  • Made ObjectlessTrackingBehaviour obselete. Use TrackingBehaviour instead.
  • Added &lt;T> to Endpoints.
  • Added Recorded Statementspreview to Endpoints, (see 🖼️).
  • Added preview for Pipeline and DataProvider holding their pipeline components, (see 🖼️).

See more details in:
https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr/-/merge_requests/16

· Sergej.Goerzen

xAPI4Unity v2.2.0 (Recommended!)

🚀 Features

  • The window is opening on startup, now if no xAPI registry is set.
  • You can export your registry as .unitypackage now. This can be used e.g. to share or reuse in other projects. Go to xAPI4Unity / Export .unitypackage in menu (see screenshot).
  • Added Create folder to xAPI Definitions Editor.
  • Added * mark for unsaved changed files.
  • Added xAPI Conflict Resolver to resolve conflicts between new definitions of remote and your local (see screenshot).
  • It is now possible to define an own repository and branch in fetcher settings (see screenshot).

📏 Minor changes

  • Resolved some compatibility issues.
  • Removed some obselete warnings.
  • Improved UI
  • Smaller fixes
  • New menu entries (see screenshot).
  • Added version history to CHANGELOG.md.

See more details in:
https://gitlab.com/learntech-rwth/omilaxr-ecosystem/xapi-4-unity/-/merge_requests/6

· Sergej.Goerzen

Updates Notes for OmiLAXR and OmiLAXR.xAPI v2.0.18

Changes (need for action expected)

  • Renamed "EventTrackingBehaviour" into "ObjectlessTrackingBehaviour" as it has name confusions with "TrackingBehaviourEvent" - what is used for events.
  • Made existing Tracking Behaviours better overwriteables (made methods protected and virtual) in case you want to adapt them by a subclass.
  • Made finally compatible for Unity >=2020.3.15f (it is now visible in Package Manager for Unity 2020)

Need for action

  • Only if your project throws erros, check if one of your Tracking Behaviours extends "EventTrackingBehaviour" and rename it to "ObjectlessTrackingBehaviour" (do not confuse this with "TrackingBehaviourEvent" you are using for events!)

See https://gitlab.com/learntech-rwth/omilaxr-ecosystem/v2/omilaxr/-/merge_requests/13

· Sergej.Goerzen

Update Notes for xAPI4Unity 2.1.10

Bugfixes

  • Fixes issues with detection of default Assets folder
  • Removed shared SettingsKey that it used. Multiple projects shared the same assets folder.

Smaller Changes

  • Increased default height of window.
  • Improved compatibility for older unity versions
  • QuickFetch when click Save in xAPI Definitions Editor

· Sergej.Goerzen

Release Notes for OmiLAXR.UnityXR v1.0.0

The first version of OmiLAXR.UnityXR was released! Now, you have the possibility to plug and play following components. More will come in future.

It can be included either as full own prefab OmiLAXR.UnitXR (full) (than you have to replace OmiLAXR prefab) or you can simply use the PipelineExtension mechanism and drag OmiLAXR.Unity prefab into the scene without removing anything else.

Listeners

  • LocomotionListener: Provides all &lt;LocomotionMediator> components to pipeline.
  • TeleportationListener: Provides all &lt;TeleportationProvider>, &lt;BaseTeleportationInteractable> (&lt;TeleportationAnchor>, &lt;TeleportationArea>) components to pipeline.
  • XRBaseInteractbaleListener: Provides all &lt;XRBaseInteractable> components to pipeline.
  • XROriginListener: Provides all &lt;XROrigin> components to pipeline.

Tracking Behaviours

  • UnityXRTeleportationTrackingBehaviour: Tracks teleportation events of &lt;TeleportationProvider>, &lt;TeleportationArea> and &lt;TeleportationAnchor> components.
  • XRBaseInteractableTrackingBehaviour: A &lt;InteractableTrackingBehaviour> for tracking XR controllers by using &lt;XRBaseInteractable> components.

· Sergej.Goerzen

Updates Notes for xAPI4Unity 2.1.8-2.1.9

New features

  • Added "Edit xAPI Definitions" Window
  • Watching xAPI.Registry and (un)set XAPI_REGISTRY_EXISTS scripting define symbol based on existence

Smaller changes

  • Improved UI/UX
  • catched issues if xAPI registry files have wrong structure in extensions. Ignore wrong files.

Bugfixes

  • made unity 2020 compatible again

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.13 - v.2.0.17

New features

  • Added InputSystemTrackingBehaviour, TeleportationTrackingBehaviour
  • Generalized stuff for preparing for OmiLAXR.UnityXR
  • Added SessionManager, SessionTrackingBehaviour and SessionComposer to manage if a tracking session (pipeline) starts or end for an actor

Smaller changes

  • Setting InputSystem Both is not needed anymore.
  • Reorganized prefabs folder
  • Remove error if installed in wrong order. Now, the order doesn't matter anymore.

Bugfixes

  • LrsCredentialsLoader is not starting anymore if it is disabled

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v.2.0.12

Smaller Changes

  • Added LICENSE
  • Removed Newtonsoft.JSON dependency from package.json
  • made OnEnable() in TrackingBehaviour virtual

Update Notes for OmiLAXR.HypeRate v.1.0.2

Bugfixes

  • Small fix: Error thrown if disabled and quit application

Smaller Changes

  • Added LICENSE
  • Removed Newtonsoft.JSON dependency from package.json

Update Notes for xAPI4Unity v2.1.7

Smaller Changes

  • Settings are saving automatically.
  • Removed save button
  • Option 1 sets the path automatically to Assets folder in project.

News

UnityXR module was implemented and published in beta version. More details are following in the #channel section.

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v.2.0.11

Bugfixes

  • fixed path of example.credentials.json

New features

  • Added [Global Settings] component to OmiLAXR prefab
  • with obj.GetTrackingName() you have also the possibility to use path name instead of only using object name. To enable this choose this option in [Global Settings] component.

xAPI

  • none

Smaller Changes

  • LocalEndpoint has now the possiblity to choose between persistantDataPath, tempPath or a custom path for storing statements

Need for action

  • none

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.9

Bugfixes

  • improved considering enabled property in pipeline components
  • fixed HigherComposer has no SendStatement method

New features

  • Added ActorDataProvider for holding global data for selected actors (e.g. result data for heart rate).
  • Method Detect&lt;T> in Tracking behaviours uses FindObjectsOfType&lt;T> and provides directly to Found(objects)
  • AutoListener&lt;T> class can be used as base class to automatically apply Detect&lt;T> function thus StartListening() is not needed
  • Added further Bind function to TrackingBehaviorEventwith a default invoker. Thus a short notation is possible, e.g. OnClickedButton.Bind(button.onClick, this, button).
  • HeartRateMonitor for extending context with heart rate value. It needs a HeartRateProvider (an ActorDataProvider) as input. You can use any heart rate framework you want - you need just extend this class and override int GetHeartRate().
  • Simulator classes as examples HeartRateSimulator
  • Component ExcludeFromTracking and a filter for these components to exclude explicit game objects that have this component.
  • Added menu item OmiLAXR / Create credentials.json file to create a credentials file in StreamingAssets.

xAPI (Need for action expected)

  • Heart rate as result extension for each actor pipeline holding HeartRateProvider

Smaller Changes

  • Renamed protected pipeline to public Pipeline. Just rename if you are issued.
  • Ensured compatbility for Unity 2020, 2021, 2022, 2023 and 6 (6000)

Need for action

Check on errors if you need to action

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.10

Bugfixes

  • Fixed errors for Unity 2021

New features

  • None

xAPI

  • None

Smaller Changes

  • Updated readmes

Need for action

  • None

· Sergej.Goerzen

Update Notes for xAPI4Unity v2.1.6

Bugfixes

  • None

New features

  • Added as Option 1 the possibility to download and extract xAPI Registry from gitlab directly to assets folder.
  • Ensured compatibility for Unity 2020, 2021, 2022 and Unity 6

Smaller Changes

  • Option 1 is now Option 2
  • Option 2 is now Option 3
  • Updated readme
  • Renamed Menu Items
  • Smaller internal code optimizations

Need for action

  • None

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.8

Bugfixes

  • only enabled pipeline components are used
  • Select&lt;T> is not working for all
  • Unbound OnFoundObjects events on pipeline stop

New features

  • LocalEndpoint to store statements locally
  • FPS Monitor Component
  • [ReadOnly]-Attribute for Inspector properties
  • Added ITrackingBehaviour, EventTrackingBehaviour, ObjectTrackingBehaviour and TrackingBehaviour&lt;T> for strict objects type in Tracking Behaviour (no breaking changes)
  • A description is now displayed in Inspector for pipeline components by using [Description("...")]

xAPI (Need for action expected)

  • FPS value as statement context
  • Instructor for a Pipeline
  • Registration UUID in statement context
  • actor scrolled mousewith scrollValue
  • actor focused/unfocused game
  • fixed actor started game
  • uiElementOptions as activity extension (e.g. in dropdown)

Smaller Changes

  • Deleted xApiStatementBuilder and LocalFallback.
  • Removed Instructor and Team Component from OmiLAXR.xAPI prefab.
  • Renamed Actor in Learner Pipeline by default to "Learner"
  • Removed SceneGameObjectsListener from "System Pipeline". Instead used GameStateWatcherListener.
  • Capitalized onFoundObjects event.

Need for action

Check on errors if you need to action

  • (All): You need to ensure you have the newest xAPI Registry JSON files (look in https://gitlab.com/learntech-rwth/xapi/-/merge_requests/42/diffs).
  • (If you want strict type in your TrackingBehaviour AfterFilteredObjects): Add &lt;YourType> to class YourClass : TrackingBehaviour&lt;YourType> and replace Object[] objects by (YourType[] objects) in AfterFilteredObjects. After that Select is applied automatically right before and is not needed anymore.
    -(If you do not use AfterFilteredObjects in your class): Extend from EventTrackingBehaviour instead of TrackingBehaviour. It makes the method not mandatory anymore.

· Sergej.Goerzen

Update Notes for OmiLAXR and OmiLAXR.xAPI v2.0.7

Bugfixes

  • Fixed "System started Game" statement

New components, functions & features

  • Custom timestamp by WithTimestamp(DateTime timestamp) to xApiStatement
  • Dispatch(Action action) function to Endpoint to dispatch functions in main thread.
    -SendImmediate function to endpoint for sending "high priority" statements without using queue system.
  • StatementPrinter endpoint to OmiLAXR Data Provider prefab (disabled per default)

xAPI

  • Scene name to Context
  • Tracking for UI elements: Toggle, Scrollbar, TextField, TextFieldTMP
  • "System (paused/resumed) Game" statement

Smaller Changes

  • Changed Inspector Menu Paths for some components
  • Added UnityComponentFilter to LearnerPipeline prefab by default
  • System start, pause, resumed and quit statements are sent immediatly
  • Made Found(Object[] objects) in Listener compatible with only one object. It is not needed to provide an array anymore if you need it for only one object (e.g. Found(Main.camera.gameObject)).
  • Added enabled Checkbox to BasicAuthFileLoader, TrackingBehaviour, Listener, .

Need for action

** Warning: There will be Unity errors after Update. Check if you need to action**

  • (If you are using affected events) Capizatilized some event names. Just adjust the names.
  • (All) Added IComposer to remove BindedComposer. Thus, GetAuthor() need to be changed from protected to public.
  • (If you are using AfterComposed): AfterComposed has one more property (bool immediate)
  • (If you override TranferStatement): We renamed in Endpoint the TransferStatement() to HandleQueue(). But a "TransferStatement" do still exist for other purpose.

· Sergej.Goerzen

Update Notes xAPI4Unity v2.1.3

  • cleaned up unneeded code. Compilation time increased a bit. (unnoticeable stuff)
  • Removed Designer Window (never finished, not needed)
  • improved ToString() of xAPI_Extensions

Attention to our design

Simple and modular structure

Modular extensible design enabled to realize all kind of tracking mechanism in a strict structure.

OmiLAXR Pipeline

Attention to high-quality and consistent xAPI statements

We use xAPI consistent and IDE-supported.

Using our ecosystem you can get high-quality xAPI statements and ensure consistency. As your xAPI definitions are transformed to C# code, you get full IDE support.

Researchers
For Researchers

Ensure consistent and standardized XR data according FAIR principles.

Developers
For Developers

Save a lot of repetitive work and use your time for more complex tasks.

XR
For Virtual, Mixed & Augmented Reality

Compatible with several XR technologies.