Compare commits

...
29 Commits
Author SHA1 Message Date
Mamadou Babaei c8801a48fa bump the plugin version to v2.1.3 2024-10-11 12:30:22 +02:00
Mamadou Babaei de11ff03c8 update the platform support matrix and also add a note in regards to fab and ue marketplace transition 2024-10-11 12:30:22 +02:00
Mamadou Babaei 42c560c43c add the planned features for the v2.2.x release series 2024-10-11 12:30:22 +02:00
Mamadou Babaei dfdb6017dc silence another ue 5.5 deprecation warning with a temporary workaround for the time being 2024-10-11 12:30:22 +02:00
Mamadou Babaei 2523b54a91 avoid mentioning the patch releases in the planned features completion status page 2024-10-11 12:30:22 +02:00
Mamadou Babaei 1d9ca12cf8 address a few ue 5.5 deprecation warnings 2024-10-11 12:30:22 +02:00
Mamadou Babaei 50599d2832 add a missing header 2024-10-11 12:30:22 +02:00
Mamadou Babaei 843c528fe1 add support for epic native toolchain v23 2024-10-11 12:30:22 +02:00
Mamadou Babaei 33a0bc10b8 bump the senseglove libraries to v2.105.2-f2de4b89 2024-10-11 12:30:21 +02:00
Mamadou Babaei 2dfb39842e fix code formatting 2024-10-11 12:30:21 +02:00
Mamadou Babaei bae22c36f5 remove a redundant header 2024-10-11 12:30:21 +02:00
Mamadou Babaei cfa01f1b97 fix a bug inside USGVirtualHandComponent::PostEditChangeProperty() where the get member name check happens against the wrong class and member names 2024-10-11 12:30:21 +02:00
Mamadou Babaei ab72a893e5 fix a grammatical typo in a comment 2024-10-11 12:30:21 +02:00
Mamadou Babaei 5c902276e9 bump the plugin version to v2.1.2 2024-09-02 19:38:01 +02:00
Mamadou Babaei 63ff7ba433 update the changelog 2024-09-02 19:38:01 +02:00
Mamadou Babaei 4ee17604dd update the changelog 2024-09-02 19:38:01 +02:00
Mamadou Babaei 937b298d83 fix a few virtual hand component visibility issues 2024-09-02 19:38:01 +02:00
Mamadou Babaei 5c33917333 fix the non-existent default hand-mesh warnings polluting the logs when packaging the game 2024-09-02 19:38:01 +02:00
Mamadou Babaei 6d2103bb9b update the changelog 2024-09-02 19:38:01 +02:00
Mamadou Babaei 0b30940ee7 fix the wrong script name for USXRTrackerKismetLibrary 2024-09-02 19:38:01 +02:00
Mamadou Babaei ba92e4313d fix the wrong script name for USGHMDTrackerKismetLibrary 2024-09-02 19:38:01 +02:00
Mamadou Babaei c9e8e24ee0 expand the clickable area on the handbook index page revision buttons 2024-09-02 19:38:01 +02:00
Mamadou Babaei f19f76d439 an overview title fix to match the summary file 2024-09-02 19:38:00 +02:00
Mamadou Babaei 3ddef7fe40 bump the SenseGlove Unreal Engine Plugin to v2.1.1 2024-08-18 01:46:19 +02:00
Mamadou Babaei 98c40746d2 fix documentation typos 2024-08-18 01:46:19 +02:00
Mamadou Babaei 59f8e1a71a fix a bug where SG_GIT_IS_SHALLOW_CLONE while building the handbook is always set to yes even if it's not a shadow clone 2024-08-18 01:32:14 +02:00
Mamadou Babaei 5a9768b42e removed android ndk r25 armv7 and x86 dependencies brought back by mistake while merging v2.1.0 from the dev branch to the master branch 2024-08-18 00:53:07 +02:00
Mamadou Babaei fc679a9f42 fix a bug that causes a handbook revision mismatch when deploying the handbook from the dev branch 2024-08-18 00:27:05 +02:00
Mamadou Babaei 978883d19b fix the messed up changelog file caused by cherry-picking merge conflicts between the dev branch and the master branch 2024-08-18 00:05:25 +02:00
66 changed files with 259 additions and 119 deletions
+6 -3
View File
@@ -43,7 +43,7 @@ SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME := unreal-docs-senseglove-com-deploy-XXXXXXXXXX
SG_HANDBOOK_FAVICON_FILE := $(SG_HANDBOOK_SRC_DIR)/favicon.svg SG_HANDBOOK_FAVICON_FILE := $(SG_HANDBOOK_SRC_DIR)/favicon.svg
SG_DOT_GIT_DIR := $(realpath $(SG_HANDBOOK_DIR)/../.git) SG_DOT_GIT_DIR := $(realpath $(SG_HANDBOOK_DIR)/../.git)
SG_DOT_GIT_SHALLOW_FILE := $(realpath $(SG_DOT_GIT_DIR)/shallow) SG_DOT_GIT_SHALLOW_FILE := $(SG_DOT_GIT_DIR)/shallow
SG_PLUGIN_DIR := $(realpath $(SG_HANDBOOK_DIR)/..) SG_PLUGIN_DIR := $(realpath $(SG_HANDBOOK_DIR)/..)
SG_PLUGIN_RESOURCES_DIR := $(SG_PLUGIN_DIR)/Resources SG_PLUGIN_RESOURCES_DIR := $(SG_PLUGIN_DIR)/Resources
@@ -189,9 +189,9 @@ SG_BUILD_HOST := $(shell hostname)
SG_BUILD_TIME := $(shell date '+%a %b %d, %Y %H:%M %Z %z') SG_BUILD_TIME := $(shell date '+%a %b %d, %Y %H:%M %Z %z')
ifeq ($(strip $(SG_GIT_BRANCH)),dev) ifeq ($(strip $(SG_GIT_BRANCH)),dev)
ifeq ($(strip $(SG_GIT_VERSION)),) ifeq ($(strip $(SG_GIT_TAG)),)
SG_HANDBOOK_REVISION := next SG_HANDBOOK_REVISION := next
endif # ($(strip $(SG_GIT_VERSION)),) endif # ($(strip $(SG_GIT_TAG)),)
endif # ($(strip $(SG_GIT_BRANCH)),dev) endif # ($(strip $(SG_GIT_BRANCH)),dev)
SG_IS_GIT_BRANCH_HEAD_OR_MASTER := $(or $(filter HEAD,$(strip $(SG_GIT_BRANCH))),$(filter master,$(strip $(SG_GIT_BRANCH)))) SG_IS_GIT_BRANCH_HEAD_OR_MASTER := $(or $(filter HEAD,$(strip $(SG_GIT_BRANCH))),$(filter master,$(strip $(SG_GIT_BRANCH))))
@@ -635,6 +635,9 @@ endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "transform: scale(1.05);" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo "transform: scale(1.05);" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".cell a {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo ".cell a {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "display: block;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "height: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "width: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "text-decoration: none;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo "text-decoration: none;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "font-weight: bold;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) @echo "font-weight: bold;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
+1 -1
View File
@@ -64,7 +64,7 @@ Welcom to the SenseGlove Unreal Engine Handbook!
- [Safe Glove Access in Blueprint](advanced-topics/safe-glove-access-blueprint/README.md) - [Safe Glove Access in Blueprint](advanced-topics/safe-glove-access-blueprint/README.md)
- [OpenXR](advanced-topics/openxr/README.md) - [OpenXR](advanced-topics/openxr/README.md)
- [Consuming FXRMotionControllerData](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/README.md) - [Consuming FXRMotionControllerData](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/README.md)
- [Blueprints](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md) - [Blueprint](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md)
- [C++](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp.md) - [C++](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp.md)
# 🔌 Low-Level API # 🔌 Low-Level API
+55 -8
View File
@@ -5,6 +5,52 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.1.3] - 2024-10-11
### Added
- Added initial support for the upcoming Unreal Engine `5.5` release. Please note that, while the plugin is functional, a few adjustments are still required to address deprecation warnings. Specifically, the `FXRMotionControllerData` struct needs to be replaced with the newly introduced `FXRMotionControllerState` and `FXRHandTrackingState` structs, along with adjustments to adhere to the new hand-tracking API changes.
- Added support for Epic Native Toolchain `v23`.
### Fixed
- Fix a bug inside `USGVirtualHandComponent::PostEditChangeProperty()` where the get member name check happens against the wrong class and member names.
- Additional minor fixes and improvements that may not be listed here.
### Changed
- The SenseGlove libraries have been updated to `v2.105.0-02a2e508`.
## [2.1.2] - 2024-09-02
This is a bugfix release that addresses a few non-critical issues and documentation fixes.
### Fixed
- Fix a bug where the hands are always visible even when `bVisibleWhenHandDataUnavailable` is disabled.
- Fix a bug where the `HandVisibilityChangedEvent` event is not triggered on the virtual hand component visibility changes.
- Fix the wrong script name for `USGHMDTrackerKismetLibrary`.
- Fix the wrong script name for `USGXRTrackerKismetLibrary `.
- Fix `LogPython: Warning: 'SGHMDTrackerKismetLibrary' and 'SGXRTrackerKismetLibrary' have the same name (SenseGloveHeadMountDisplayKismetLibrary) when exposed to Python. Rename one of them using 'ScriptName' meta-data` when packaging the game.
- Fix the non-existent default hand-mesh warnings polluting the logs when packaging the game.
- Expanded the clickable area on the handbook index page revision buttons.
- Minor documentation fixes.
## [2.1.1] - 2024-08-18
This is a bugfix release with no actual plugin code changes, mostly addressing issues in the documentation and third-party dependencies caused by source control merge conflicts.
### Fixed
- Fix the messed up changelog file caused by cherry-picking merge conflicts between the dev branch and the master branch.
- Fix a bug that causes a handbook revision mismatch when deploying the handbook from the dev branch.
- Fix a bug where `SG_GIT_IS_SHALLOW_CLONE` while building the handbook is always set to `yes` even if it's not a shadow clone because `SG_DOT_GIT_SHALLOW_FILE` evaluates to an empty string when the `.git/shallow` file does not exist.
- Fix some documentation typos.
### Removed
- Removed Android NDK r25 armv7 and x86 dependencies brought back by mistake while merging v2.1.0 from the dev branch to the master branch.
## [2.1.0] - 2024-08-16 ## [2.1.0] - 2024-08-16
This is a minor release focusing mainly on bringing OpenXR-compatible hand tracking support (`XR_EXT_hand_tracking`) and Head-mounted Display automatic detection for adjusting wrist tracker offsets automatically at runtime. This is a minor release focusing mainly on bringing OpenXR-compatible hand tracking support (`XR_EXT_hand_tracking`) and Head-mounted Display automatic detection for adjusting wrist tracker offsets automatically at runtime.
@@ -127,6 +173,14 @@ This is a minor release focusing mainly on bringing OpenXR-compatible hand track
- The `UXRDeviceVisualizationComponent` provided by Unreal Engine is used in the SGPawn class as ControllerVisualizerLeft and ControllerVisualizerRight for implementing the wrist tracking hardware visualization feature. However, it is not compatible with the new OpenXR system in certain scenarios. For instance, when the motion controllers serve as wrist tracking hardware since the SenseGlove plugin is now introduced to the engine as an `OpenXRHandTracking` system, it causes the UXRDeviceVisualizationComponent to visualize the wrist tracking hardware at coordinates (0.0f, 0.0f, 0.0f) instead of their actual location and rotation in the world. This happens because the component incorrectly registers them as inactive, possibly because it's assumed hand tracking and motion controllers cannot be in use at the same time. Currently, we use this feature solely for debugging, and we have an alternative in the form of wrist-tracking debug gizmos, which can be toggled on or off via the settings system. In future releases, we might remove this feature due to its incompatibility, unless we find a solution to make the `UXRDeviceVisualizationComponent` work with the new system. Alternatively, we may develop our own version of the `UXRDeviceVisualizationComponent`. - The `UXRDeviceVisualizationComponent` provided by Unreal Engine is used in the SGPawn class as ControllerVisualizerLeft and ControllerVisualizerRight for implementing the wrist tracking hardware visualization feature. However, it is not compatible with the new OpenXR system in certain scenarios. For instance, when the motion controllers serve as wrist tracking hardware since the SenseGlove plugin is now introduced to the engine as an `OpenXRHandTracking` system, it causes the UXRDeviceVisualizationComponent to visualize the wrist tracking hardware at coordinates (0.0f, 0.0f, 0.0f) instead of their actual location and rotation in the world. This happens because the component incorrectly registers them as inactive, possibly because it's assumed hand tracking and motion controllers cannot be in use at the same time. Currently, we use this feature solely for debugging, and we have an alternative in the form of wrist-tracking debug gizmos, which can be toggled on or off via the settings system. In future releases, we might remove this feature due to its incompatibility, unless we find a solution to make the `UXRDeviceVisualizationComponent` work with the new system. Alternatively, we may develop our own version of the `UXRDeviceVisualizationComponent`.
- Although the SenseGlove OpenXR implementation is fully compatible with the `IOpenXRHMD` interface and the `FOpenXRHMD` `XRTrackingSystem`, it is not compatible with the `FOculusXRHMD` backend provided by the Meta XR plugin. The same issue likely applies to the VIVE OpenXR plugin. So, if these plugins are enabled in your project, the SenseGlove OpenXR will not function as intended, effectively breaking the plugin's functionality. It seems these plugins are necessary in order to make the fallback to the hand-tracking feature work on Android. While we may add support and compatibility with Meta XR and VIVE OpenXR plugins in the future, for the time being, if your project requires these plugins, we advise continuing with the `v2.0.x` release of the SenseGlove Unreal Engine plugin until this issue is addressed. - Although the SenseGlove OpenXR implementation is fully compatible with the `IOpenXRHMD` interface and the `FOpenXRHMD` `XRTrackingSystem`, it is not compatible with the `FOculusXRHMD` backend provided by the Meta XR plugin. The same issue likely applies to the VIVE OpenXR plugin. So, if these plugins are enabled in your project, the SenseGlove OpenXR will not function as intended, effectively breaking the plugin's functionality. It seems these plugins are necessary in order to make the fallback to the hand-tracking feature work on Android. While we may add support and compatibility with Meta XR and VIVE OpenXR plugins in the future, for the time being, if your project requires these plugins, we advise continuing with the `v2.0.x` release of the SenseGlove Unreal Engine plugin until this issue is addressed.
## [2.0.8] - 2024-07-15
This is a bugfix release that contains a somewhat important bugfix backported from the next release of the plugin as documented below.
### Fixed
- Fix a bug where the SGPawn right-hand grab colliders' default size is mistakenly set to the default value for the left-hand grab colliders at CDO initialization time.
## [2.0.7] - 2024-05-29 ## [2.0.7] - 2024-05-29
This is a bugfix release with no actual plugin code changes, only fixing issues with binary assets incompatible with UE versions earlier than 5.4. This is a bugfix release with no actual plugin code changes, only fixing issues with binary assets incompatible with UE versions earlier than 5.4.
@@ -192,13 +246,6 @@ This is a patch release with no code changes.
This is a bugfix release. This is a bugfix release.
### Added
- A fallback to HMD and wrist tracker hardware auto-detection mechanism has been added to be triggered in situations when automatic detection of the wrist tracker hardware is desired, e.g., either by not setting it explicitly, or setting it to the default None value.
- Added the SGHeadMountDisplay utility class, exposed to both C++ and Blueprint, in order to easily gather information about the HMD at runtime.
- Added the SGTypes header to the SenseGloveTypes module in order to define and share SenseGlove module types through this header across the plugin modules.
- Added ESGHeadMountDisplayDevice enum with supported HMDs list.
### Fixed ### Fixed
- Fix a bug inside both SGVirtualHandComponent and SGWristTrackerComponent where the connected glove's UObject instance gets destroyed and re-instantiated every frame. With this fix now the glove instance will be created or destroyed only when a glove connects to or disconnects from the system. - Fix a bug inside both SGVirtualHandComponent and SGWristTrackerComponent where the connected glove's UObject instance gets destroyed and re-instantiated every frame. With this fix now the glove instance will be created or destroyed only when a glove connects to or disconnects from the system.
@@ -675,4 +722,4 @@ This is a minor release focusing on adherence to the Unreal Engine Marketplace G
### Added ### Added
- Initial public release of the SenseGlove haptic API for Unreal Engine with support for Microsoft Windows and GNU/Linux. - Initial public release of the SenseGlove haptic API for Unreal Engine with support for Microsoft Windows and GNU/Linux.
+7 -7
View File
@@ -19,7 +19,7 @@
├── SenseGloveBackend (responsible for initialization and deinitialization of the backend libraries) ├── SenseGloveBackend (responsible for initialization and deinitialization of the backend libraries)
├── SenseGloveBackendKismet (exposes Blueprints-specific functionality from the SenseGloveBackend module) ├── SenseGloveBackendKismet (exposes Blueprint-specific functionality from the SenseGloveBackend module)
├── SenseGloveBuildHacks (uses Exceptions and RTTI, internally used for compiler-specific build hacks) ├── SenseGloveBuildHacks (uses Exceptions and RTTI, internally used for compiler-specific build hacks)
@@ -27,33 +27,33 @@
├── SenseGloveConnectImpl (uses Exceptions and RTTI, intended for internal use only) ├── SenseGloveConnectImpl (uses Exceptions and RTTI, intended for internal use only)
├── SenseGloveConnectKismet (SGConnect functionality exposed to Blueprints) ├── SenseGloveConnectKismet (SGConnect functionality exposed to Blueprint)
├── SenseGloveCore (exposes part of the SGCoreCpp low-level API to C++) ├── SenseGloveCore (exposes part of the SGCoreCpp low-level API to C++)
├── SenseGloveCoreImpl (uses Exceptions and RTTI, intended for internal use only) ├── SenseGloveCoreImpl (uses Exceptions and RTTI, intended for internal use only)
├── SenseGloveCoreKismet (SGCoreCpp functionality exposed to Blueprints) ├── SenseGloveCoreKismet (SGCoreCpp functionality exposed to Blueprint)
├── SenseGloveDebug (a utility debug module) ├── SenseGloveDebug (a utility debug module)
├── SenseGloveDebugKismet (exposes Blueprints-specific functionality from the SenseGloveDebug module) ├── SenseGloveDebugKismet (exposes Blueprint-specific functionality from the SenseGloveDebug module)
├── SenseGloveEditor (the Editor module) ├── SenseGloveEditor (the Editor module)
├── SenseGloveInterop (internally used for interoperability between RTTI disabled/enabled modules) ├── SenseGloveInterop (internally used for interoperability between RTTI disabled/enabled modules)
├── SenseGloveKismet (exposes Blueprints-specific functionality from the SenseGlove module) ├── SenseGloveKismet (exposes Blueprint-specific functionality from the SenseGlove module)
├── SenseGloveLog (the internal log module) ├── SenseGloveLog (the internal log module)
├── SenseGloveSettings (the plugin's settings manager) ├── SenseGloveSettings (the plugin's settings manager)
├── SenseGloveSettingsKismet (exposes Blueprints-specific functionality from the SenseGloveSettings module) ├── SenseGloveSettingsKismet (exposes Blueprint-specific functionality from the SenseGloveSettings module)
├── SenseGloveTracking (provides XR_EXT_hand_tracking support, HMD auto-detection, and SenseGlove device tracking) ├── SenseGloveTracking (provides XR_EXT_hand_tracking support, HMD auto-detection, and SenseGlove device tracking)
├── SenseGloveTrackingKismet (exposes Blueprints-specific functionality from the SenseGloveTracking module) ├── SenseGloveTrackingKismet (exposes Blueprint-specific functionality from the SenseGloveTracking module)
├── SenseGloveTypes (exposes various enums from the backend libraries and also types from the SenseGlove module) ├── SenseGloveTypes (exposes various enums from the backend libraries and also types from the SenseGlove module)
@@ -1,6 +1,6 @@
## Planned Features Completion Status ## Planned Features Completion Status
### Implemented as of v2.1.0 ### Implemented as of v2.1.x
- [X] Full SenseGlove low-level core API access through Unreal C++. - [X] Full SenseGlove low-level core API access through Unreal C++.
- [X] Full SenseGlove low-level core API access through Blueprint. - [X] Full SenseGlove low-level core API access through Blueprint.
@@ -26,7 +26,7 @@
- [X] Easy wrist/hand tracking debugging using the SenseGlove Debug module. - [X] Easy wrist/hand tracking debugging using the SenseGlove Debug module.
- [X] A generic Settings module with the ability to override settings. - [X] A generic Settings module with the ability to override settings.
- [X] C++/Blueprint interaction events such as OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch. - [X] C++/Blueprint interaction events such as OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch.
- [X] A fallback to HMD and wrist tracker hardware auto-detection mechanism when automatic detection of the wrist tracker hardware is desired. - [X] A fall back to HMD and wrist tracker hardware auto-detection mechanism when automatic detection of the wrist tracker hardware is desired.
- [X] OpenXR-compatible hand tracking (XR_EXT_hand_tracking) support. - [X] OpenXR-compatible hand tracking (XR_EXT_hand_tracking) support.
- [X] FXRMotionControllerData compatible hand animation system. - [X] FXRMotionControllerData compatible hand animation system.
- [X] FXRMotionControllerData compatible wrist tracking system. - [X] FXRMotionControllerData compatible wrist tracking system.
@@ -36,14 +36,15 @@
- [X] A flexible virtual hand animation system that can take the mesh bone's transforms into account for a more reliable hand animation. - [X] A flexible virtual hand animation system that can take the mesh bone's transforms into account for a more reliable hand animation.
- [X] Ability to manage the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly. - [X] Ability to manage the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
### Upcoming features planned for the v2.2.0 release ### Upcoming features planned for the v2.2.x release
- [ ] Migrating away from the deprecated `FXRMotionControllerData` in favor of `FXRMotionControllerState` and `FXRHandTrackingState`.
### Planned features long-term ### Planned features long-term
- [ ] Get tracking input from sources other than a SenseGlove device. - [ ] Get tracking input from sources other than a SenseGlove device.
- [ ] Be able to assign behaviors to different objects (meshes) in the scene (e.g. Slider, Hinge, basic Grabables, etc). - [ ] Be able to assign behaviors to different objects (meshes) in the scene (e.g. Slider, Hinge, basic Grabables, etc).
- [ ] Make it so developers can define or extend their own behavior(s) to an object through Code / Blueprints (e.g. I want a car door that is like a slider, but follows a path rather than a straight line). - [ ] Make it so developers can define or extend their own behavior(s) to an object through Code / Blueprint (e.g. I want a car door that is like a slider, but follows a path rather than a straight line).
- [ ] Make the hand(s) able to push around physics-driven objects (for as much as their behaviors allow) (in backlog). - [ ] Make the hand(s) able to push around physics-driven objects (for as much as their behaviors allow) (in backlog).
- [ ] Be able to grab objects with up to 2 hands (and move them around with both hands at the same time in a way that seems realistic). - [ ] Be able to grab objects with up to 2 hands (and move them around with both hands at the same time in a way that seems realistic).
- [ ] Ensure that our virtual hands (and the objects they hold) do not phase through other physics objects (e.g. walls and tables). - [ ] Ensure that our virtual hands (and the objects they hold) do not phase through other physics objects (e.g. walls and tables).
@@ -2,9 +2,10 @@
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Meta Quest Stand-alone (Android NDK)** | **HTC VIVE Stand-alone (Android NDK)** | **UE Marketplace Version** | **Azure DevOps Version** | | | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Meta Quest Stand-alone (Android NDK)** | **HTC VIVE Stand-alone (Android NDK)** | **UE Marketplace Version** | **Azure DevOps Version** |
|:--------:|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:----------------------------------------:|:--------------------------------------:|:--------------------------:|:------------------------:| |:--------:|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:----------------------------------------:|:--------------------------------------:|:--------------------------:|:------------------------:|
| **5.4** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.0 | ✅ v2.1.0 | | **5.5** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | | ✅ v2.1.3 |
| **5.3** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.0 | ✅ v2.1.0 | | **5.4** | ❌ | | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
| **5.2** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.0 | ✅ v2.1.0 | | **5.3** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
| **5.2** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ❓ | ⚠️ v2.0.1 | ⚠️ v2.0.2 | | **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ❓ | ⚠️ v2.0.1 | ⚠️ v2.0.2 |
| **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ❓ | ⚠️ v1.6.1 | ⚠️ v1.6.1 | | **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ❓ | ⚠️ v1.6.1 | ⚠️ v1.6.1 |
| **4.27** | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x (r21e) | ❓ | ⚠️ v1.3.1 | ⚠️ v1.4.3 | | **4.27** | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x (r21e) | ❓ | ⚠️ v1.3.1 | ⚠️ v1.4.3 |
@@ -20,6 +21,7 @@
* <code>❓</code> Unknown or untested * <code>❓</code> Unknown or untested
Remarks: Remarks:
* With the Fab content marketplace scheduled to launch at an unspecified date in October 2024, and the fact that the Unreal Engine Marketplace no longer accepting any new submissions starting from October 1, any releases made during the transition from the Unreal Engine Marketplace to Fab will only be accessible through the [SenseGlove Microsoft Azure repositories](../getting-started/installation/microsoft-azure-devops-repositories.md).
* Per [Epic's Marketplace Guidelines](https://www.unrealengine.com/en-US/marketplace-guidelines) in regards to Code Plugins (sections `2.6.3`.d and `3.1.b`), we are only able to distribute or update the SenseGlove plugin for the last `3` stable versions of Unreal Engine. As a result, we won't be able to publish updates or bug fixes for the older versions of the Engine except on rare occasions and only through our official repository on Microsoft Azure DevOps. * Per [Epic's Marketplace Guidelines](https://www.unrealengine.com/en-US/marketplace-guidelines) in regards to Code Plugins (sections `2.6.3`.d and `3.1.b`), we are only able to distribute or update the SenseGlove plugin for the last `3` stable versions of Unreal Engine. As a result, we won't be able to publish updates or bug fixes for the older versions of the Engine except on rare occasions and only through our official repository on Microsoft Azure DevOps.
* All third-party libraries on Windows built against Windows SDK `10.0`. * All third-party libraries on Windows built against Windows SDK `10.0`.
* Oculus and VIVE support is only provided through the recommended Android NDK versions by Epic Games. * Oculus and VIVE support is only provided through the recommended Android NDK versions by Epic Games.
+3 -3
View File
@@ -57,7 +57,7 @@ Toipcs that do not fall under any specific category:
- [SenseGlove Console Commands](../misc/console-commands/) - [SenseGlove Console Commands](../misc/console-commands/)
- [Deploying to Android (Standalone)](../misc/android-standalone-deployment/) - [Deploying to Android (Standalone)](../misc/android-standalone-deployment/)
- [Upgrade Guide](../misc/upgrade-guide/) - [Upgrade Guide](../misc/upgrade-guide/)
- [Optimizing for More FPS](../misc/optimize-higher-fps/) - [Optimizing for Higher FPS](../misc/optimize-higher-fps/)
## 🛠️ Advanced Topics ## 🛠️ Advanced Topics
@@ -66,14 +66,14 @@ For users familiar with the basics, this section explores advanced features of t
- [Safe Glove Access in Blueprint](../advanced-topics/safe-glove-access-blueprint/) - [Safe Glove Access in Blueprint](../advanced-topics/safe-glove-access-blueprint/)
- [OpenXR](../advanced-topics/openxr/) - [OpenXR](../advanced-topics/openxr/)
- [Consuming FXRMotionControllerData](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/) - [Consuming FXRMotionControllerData](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/)
- [Blueprints](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md) - [Blueprint](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md)
- [C++](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp.md) - [C++](../advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp.md)
## 🔌 Low-Level API ## 🔌 Low-Level API
This section delves into the SenseGlove low-level API: This section delves into the SenseGlove low-level API:
- [Low-Level Blueprints API](../low-level-api/blueprint.md) - [Low-Level Blueprint API](../low-level-api/blueprint.md)
- [Low-Level C++ API](../low-level-api/cpp.md) - [Low-Level C++ API](../low-level-api/cpp.md)
## 📑 Appendix ## 📑 Appendix
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"FileVersion": 3, "FileVersion": 3,
"Version": 1, "Version": 1,
"VersionName": "2.1.0", "VersionName": "2.1.3",
"FriendlyName": "SenseGlove", "FriendlyName": "SenseGlove",
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine", "Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
"Category": "Virtual Reality", "Category": "Virtual Reality",
@@ -284,4 +284,4 @@
] ]
} }
] ]
} }
@@ -326,8 +326,8 @@ void USGVirtualHandComponent::PostEditChangeProperty(FPropertyChangedEvent& Prop
static const FName OverridePluginSettingsName{ static const FName OverridePluginSettingsName{
FImpl::ParseVirtualHandSettingsOverridesPropertyName( FImpl::ParseVirtualHandSettingsOverridesPropertyName(
GET_MEMBER_NAME_CHECKED(FSGWristTrackingSettingsOverrides, GET_MEMBER_NAME_CHECKED(FSGVirtualHandSettingsOverrides,
FSGWristTrackingSettingsOverrides::bOverridePluginSettings)) FSGVirtualHandSettingsOverrides::bOverridePluginSettings))
}; };
if (PropertyName == RightName) if (PropertyName == RightName)
@@ -651,17 +651,26 @@ bool USGVirtualHandComponent::FImpl::IsUsingUserMesh() const
USkeletalMesh* USGVirtualHandComponent::FImpl::LoadDefaultMesh() const USkeletalMesh* USGVirtualHandComponent::FImpl::LoadDefaultMesh() const
{ {
const FString DefaultMeshPath{GetDefaultMeshPath()}; // FIXME
USkeletalMesh* DefaultMesh{ // Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath)) // virtual hand meshes again.
}; // const FString DefaultMeshPath{GetDefaultMeshPath()};
// USkeletalMesh* DefaultMesh{
// Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
// };
if (!IsValid(DefaultMesh)) // FIXME
{ // Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath)); // virtual hand meshes again.
} // if (!IsValid(DefaultMesh))
// {
// SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath));
// }
return DefaultMesh; // FIXME
//return DefaultMesh;
return nullptr;
} }
void USGVirtualHandComponent::FImpl::SetDefaultMesh() const void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
@@ -677,7 +686,10 @@ void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true); //Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
// Temporary hack to make it work inside the Blueprint Editor. // Temporary hack to make it work inside the Blueprint Editor.
#if WITH_EDITOR #if WITH_EDITOR
Owner->SetSkeletalMesh(LoadDefaultMesh(), true); // FIXME
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
// Instead
Owner->SetSkeletalMesh(nullptr, true);
#endif /* WITH_EDITOR */ #endif /* WITH_EDITOR */
} }
@@ -719,7 +731,7 @@ void USGVirtualHandComponent::FImpl::RestoreCollisionResponse() const
void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible) void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible)
{ {
Owner->SetVisibility(bInVisible, true); Owner->SetHiddenInGame(!bInVisible, false);
if (bInVisible) if (bInVisible)
{ {
@@ -786,7 +798,7 @@ void USGVirtualHandComponent::FImpl::UpdateVisibility()
if (bSetNewVisibility) if (bSetNewVisibility)
{ {
Owner->SetHiddenInGame(bHandDataAvailable); SetVisibility(bHandDataAvailable);
} }
} }
@@ -39,6 +39,7 @@
#include "Components/PrimitiveComponent.h" #include "Components/PrimitiveComponent.h"
#include "Components/SphereComponent.h" #include "Components/SphereComponent.h"
#include "Kismet/KismetMathLibrary.h" #include "Kismet/KismetMathLibrary.h"
#include "Runtime/Launch/Resources/Version.h"
#include "UObject/UObjectGlobals.h" #include "UObject/UObjectGlobals.h"
#include "XRDeviceVisualizationComponent.h" #include "XRDeviceVisualizationComponent.h"
@@ -430,7 +431,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
this, TEXT("RightThumbFingertipTouchCollider")); this, TEXT("RightThumbFingertipTouchCollider"));
RightThumbFingertipTouchCollider->SetRelativeScale3D(RightHandSettings.TouchSettings.DefaultColliderSize); RightThumbFingertipTouchCollider->SetRelativeScale3D(RightHandSettings.TouchSettings.DefaultColliderSize);
RightThumbFingertipTouchCollider->SetupAttachment( RightThumbFingertipTouchCollider->SetupAttachment(
HandRight,RightHandSettings.TouchSettings.ThumbColliderSocketName); HandRight, RightHandSettings.TouchSettings.ThumbColliderSocketName);
RightThumbFingertipTouchCollider->SetCastShadow(false); RightThumbFingertipTouchCollider->SetCastShadow(false);
RightThumbFingertipTouchCollider->bCastDynamicShadow = false; RightThumbFingertipTouchCollider->bCastDynamicShadow = false;
RightThumbFingertipTouchCollider->SetReceivesDecals(true); RightThumbFingertipTouchCollider->SetReceivesDecals(true);
@@ -1986,7 +1987,7 @@ void ASGPawn::FImpl::SetVisibility(USceneComponent* SceneComponent, const bool b
return; return;
} }
SceneComponent->SetHiddenInGame(!bVisibility); SceneComponent->SetHiddenInGame(!bVisibility, false);
} }
void ASGPawn::FImpl::UpdateHandLocation(const bool bRight, const FVector& Location, const bool bUpdateVirtualHand) const void ASGPawn::FImpl::UpdateHandLocation(const bool bRight, const FVector& Location, const bool bUpdateVirtualHand) const
@@ -2192,7 +2193,13 @@ void ASGPawn::FImpl::RecordHandVelocity(FSGGrabState& GrabState, const float Del
{ {
if (GrabState.HandVelocityHistory.IsValidIndex(0)) if (GrabState.HandVelocityHistory.IsValidIndex(0))
{ {
GrabState.HandVelocityHistory.RemoveAt(0, 1, false); GrabState.HandVelocityHistory.RemoveAt(0, 1,
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
EAllowShrinking::No
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
false
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
);
GrabState.HandVelocityHistory.Emplace(MoveTemp(HandVelocity)); GrabState.HandVelocityHistory.Emplace(MoveTemp(HandVelocity));
} }
} }
@@ -113,7 +113,9 @@ public class SenseGloveConnectImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -128,7 +130,9 @@ public class SenseGloveConnectImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -233,7 +237,9 @@ public class SenseGloveConnectImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -248,7 +254,9 @@ public class SenseGloveConnectImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -112,7 +112,9 @@ public class SenseGloveCoreImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -127,7 +129,9 @@ public class SenseGloveCoreImpl : ModuleRules
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
LibraryName = string.Format("lib{0}.a", LibraryName); LibraryName = string.Format("lib{0}.a", LibraryName);
#if UE_5_3_OR_LATER #if UE_5_5_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
#elif UE_5_3_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
#elif UE_5_2_OR_LATER #elif UE_5_2_OR_LATER
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21")); LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
@@ -59,7 +59,7 @@ struct SENSEGLOVESETTINGS_API FSGTrackingSettings
public: public:
/** /**
* Determines whether to fallback to hand-tracking, or not, when no SenseGlove device is detected: * Determines whether to fall back to hand-tracking, or not, when no SenseGlove device is detected:
* *
* - If disabled, only a real glove will be tracked. * - If disabled, only a real glove will be tracked.
* - If enabled, the plugin will fall back to hand-tracking when it's available and supported by the HMD device. * - If enabled, the plugin will fall back to hand-tracking when it's available and supported by the HMD device.
@@ -50,7 +50,6 @@
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3 #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3
#include "OpenXRHMD.h" #include "OpenXRHMD.h"
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3 */ #endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3 */
#include "Runtime/Launch/Resources/Version.h"
#include "SGCore/SGHapticGlove.h" #include "SGCore/SGHapticGlove.h"
#include "SGLog/SGLog.h" #include "SGLog/SGLog.h"
@@ -1164,9 +1163,28 @@ bool FSGXRTracker::GetMotionControllerData(
{ {
OutMotionControllerData.DeviceVisualType = EXRVisualType::Hand; OutMotionControllerData.DeviceVisualType = EXRVisualType::Hand;
/// TODO
// This is a just a temporary workaround to silence a UE 5.5 deprecation warning.
// Should be refactored with a proper implementation when migrating away from the deprecated
// `FXRMotionControllerData` in favor of newly introduced
// `FXRMotionControllerState` and `FXRHandTrackingState` structs.
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
bool bTracked = false;
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
OutMotionControllerData.bValid = HandTracker->GetAllKeypointStates( OutMotionControllerData.bValid = HandTracker->GetAllKeypointStates(
Hand, OutMotionControllerData.HandKeyPositions, OutMotionControllerData.HandKeyRotations, Hand, OutMotionControllerData.HandKeyPositions, OutMotionControllerData.HandKeyRotations,
OutMotionControllerData.HandKeyRadii); OutMotionControllerData.HandKeyRadii
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
, bTracked
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
);
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
if (!bTracked)
{
return false;
}
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
if (!ensureAlwaysMsgf( if (!ensureAlwaysMsgf(
!OutMotionControllerData.bValid !OutMotionControllerData.bValid
@@ -42,7 +42,7 @@
#include "SGHMDTrackerKismetLibrary.generated.h" #include "SGHMDTrackerKismetLibrary.generated.h"
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary")) UCLASS(meta=(ScriptName = "SenseGloveHMDTrackerKismetLibrary"))
class SENSEGLOVETRACKINGKISMET_API USGHMDTrackerKismetLibrary final : public USGBlueprintFunctionLibrary class SENSEGLOVETRACKINGKISMET_API USGHMDTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
{ {
GENERATED_BODY() GENERATED_BODY()
@@ -45,7 +45,7 @@
class UObject; class UObject;
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary")) UCLASS(meta=(ScriptName = "SenseGloveXRTrackerKismetLibrary"))
class SENSEGLOVETRACKINGKISMET_API USGXRTrackerKismetLibrary final : public USGBlueprintFunctionLibrary class SENSEGLOVETRACKINGKISMET_API USGXRTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
{ {
GENERATED_BODY() GENERATED_BODY()
@@ -35,6 +35,7 @@
#include "SGUtils/SGEngineUtils.h" #include "SGUtils/SGEngineUtils.h"
#include "CoreGlobals.h"
#if WITH_EDITOR #if WITH_EDITOR
#include "Editor.h" #include "Editor.h"
#endif /* WITH_EDITOR */ #endif /* WITH_EDITOR */
@@ -53,8 +54,21 @@ UWorld* FSGEngineUtils::GetWorld()
if (IsValid(GEditor)) if (IsValid(GEditor))
{ {
{ {
const bool bIsPIE = GPlayInEditorID != -1; const bool bIsPIE =
const int32 WorldPIEInstance = bIsPIE ? GPlayInEditorID : 1; #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
UE::GetPlayInEditorID()
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
GPlayInEditorID
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
!= -1;
const int32 WorldPIEInstance = bIsPIE
?
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
UE::GetPlayInEditorID()
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
GPlayInEditorID
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
: 1;
const FWorldContext* WorldContext{GEditor->GetPIEWorldContext(WorldPIEInstance)}; const FWorldContext* WorldContext{GEditor->GetPIEWorldContext(WorldPIEInstance)};
if (WorldContext) if (WorldContext)
{ {
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.