Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8801a48fa
|
||
|
|
de11ff03c8
|
||
|
|
42c560c43c
|
||
|
|
dfdb6017dc
|
||
|
|
2523b54a91
|
||
|
|
1d9ca12cf8
|
||
|
|
50599d2832
|
||
|
|
843c528fe1
|
||
|
|
33a0bc10b8
|
||
|
|
2dfb39842e
|
||
|
|
bae22c36f5
|
||
|
|
cfa01f1b97
|
||
|
|
ab72a893e5
|
||
|
|
5c902276e9
|
||
|
|
63ff7ba433
|
||
|
|
4ee17604dd
|
||
|
|
937b298d83
|
||
|
|
5c33917333
|
||
|
|
6d2103bb9b
|
||
|
|
0b30940ee7
|
||
|
|
ba92e4313d
|
||
|
|
c9e8e24ee0
|
||
|
|
f19f76d439
|
||
|
|
3ddef7fe40
|
||
|
|
98c40746d2
|
||
|
|
59f8e1a71a
|
||
|
|
5a9768b42e
|
||
|
|
fc679a9f42
|
||
|
|
978883d19b
|
@@ -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_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_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')
|
||||
|
||||
ifeq ($(strip $(SG_GIT_BRANCH)),dev)
|
||||
ifeq ($(strip $(SG_GIT_VERSION)),)
|
||||
ifeq ($(strip $(SG_GIT_TAG)),)
|
||||
SG_HANDBOOK_REVISION := next
|
||||
endif # ($(strip $(SG_GIT_VERSION)),)
|
||||
endif # ($(strip $(SG_GIT_TAG)),)
|
||||
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))))
|
||||
@@ -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 "}" >> $(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 "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "font-weight: bold;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_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)
|
||||
- [OpenXR](advanced-topics/openxr/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)
|
||||
|
||||
# 🔌 Low-Level API
|
||||
|
||||
@@ -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/),
|
||||
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
|
||||
|
||||
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`.
|
||||
- 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
|
||||
|
||||
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.
|
||||
|
||||
### 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
|
||||
|
||||
- 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.
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
│
|
||||
├── 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)
|
||||
│
|
||||
@@ -27,33 +27,33 @@
|
||||
│
|
||||
├── 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++)
|
||||
│
|
||||
├── 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)
|
||||
│
|
||||
├── SenseGloveDebugKismet (exposes Blueprints-specific functionality from the SenseGloveDebug module)
|
||||
├── SenseGloveDebugKismet (exposes Blueprint-specific functionality from the SenseGloveDebug module)
|
||||
│
|
||||
├── SenseGloveEditor (the Editor module)
|
||||
│
|
||||
├── 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)
|
||||
│
|
||||
├── 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)
|
||||
│
|
||||
├── 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)
|
||||
│
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## 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 Blueprint.
|
||||
@@ -26,7 +26,7 @@
|
||||
- [X] Easy wrist/hand tracking debugging using the SenseGlove Debug module.
|
||||
- [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] 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] FXRMotionControllerData compatible hand animation 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] 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
|
||||
|
||||
- [ ] 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).
|
||||
- [ ] 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).
|
||||
- [ ] 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).
|
||||
|
||||
@@ -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** |
|
||||
|:--------:|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:----------------------------------------:|:--------------------------------------:|:--------------------------:|:------------------------:|
|
||||
| **5.4** | ❌ | ❌ | ✅ 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.0 | ✅ v2.1.0 |
|
||||
| **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.5** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ❌ | ✅ v2.1.3 |
|
||||
| **5.4** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
|
||||
| **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.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 |
|
||||
@@ -20,6 +21,7 @@
|
||||
* <code>❓</code> Unknown or untested
|
||||
|
||||
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.
|
||||
* 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.
|
||||
|
||||
@@ -57,7 +57,7 @@ Toipcs that do not fall under any specific category:
|
||||
- [SenseGlove Console Commands](../misc/console-commands/)
|
||||
- [Deploying to Android (Standalone)](../misc/android-standalone-deployment/)
|
||||
- [Upgrade Guide](../misc/upgrade-guide/)
|
||||
- [Optimizing for More FPS](../misc/optimize-higher-fps/)
|
||||
- [Optimizing for Higher FPS](../misc/optimize-higher-fps/)
|
||||
|
||||
## 🛠️ 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/)
|
||||
- [OpenXR](../advanced-topics/openxr/)
|
||||
- [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)
|
||||
|
||||
## 🔌 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)
|
||||
|
||||
## 📑 Appendix
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "2.1.0",
|
||||
"VersionName": "2.1.3",
|
||||
"FriendlyName": "SenseGlove",
|
||||
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
|
||||
"Category": "Virtual Reality",
|
||||
|
||||
@@ -326,8 +326,8 @@ void USGVirtualHandComponent::PostEditChangeProperty(FPropertyChangedEvent& Prop
|
||||
|
||||
static const FName OverridePluginSettingsName{
|
||||
FImpl::ParseVirtualHandSettingsOverridesPropertyName(
|
||||
GET_MEMBER_NAME_CHECKED(FSGWristTrackingSettingsOverrides,
|
||||
FSGWristTrackingSettingsOverrides::bOverridePluginSettings))
|
||||
GET_MEMBER_NAME_CHECKED(FSGVirtualHandSettingsOverrides,
|
||||
FSGVirtualHandSettingsOverrides::bOverridePluginSettings))
|
||||
};
|
||||
|
||||
if (PropertyName == RightName)
|
||||
@@ -651,17 +651,26 @@ bool USGVirtualHandComponent::FImpl::IsUsingUserMesh() const
|
||||
|
||||
USkeletalMesh* USGVirtualHandComponent::FImpl::LoadDefaultMesh() const
|
||||
{
|
||||
const FString DefaultMeshPath{GetDefaultMeshPath()};
|
||||
USkeletalMesh* DefaultMesh{
|
||||
Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
|
||||
};
|
||||
// FIXME
|
||||
// Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
|
||||
// virtual hand meshes again.
|
||||
// const FString DefaultMeshPath{GetDefaultMeshPath()};
|
||||
// USkeletalMesh* DefaultMesh{
|
||||
// Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
|
||||
// };
|
||||
|
||||
if (!IsValid(DefaultMesh))
|
||||
{
|
||||
SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath));
|
||||
}
|
||||
// FIXME
|
||||
// Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
|
||||
// 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
|
||||
@@ -677,7 +686,10 @@ void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
|
||||
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// Temporary hack to make it work inside the Blueprint Editor.
|
||||
#if WITH_EDITOR
|
||||
Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// FIXME
|
||||
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// Instead
|
||||
Owner->SetSkeletalMesh(nullptr, true);
|
||||
#endif /* WITH_EDITOR */
|
||||
}
|
||||
|
||||
@@ -719,7 +731,7 @@ void USGVirtualHandComponent::FImpl::RestoreCollisionResponse() const
|
||||
|
||||
void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible)
|
||||
{
|
||||
Owner->SetVisibility(bInVisible, true);
|
||||
Owner->SetHiddenInGame(!bInVisible, false);
|
||||
|
||||
if (bInVisible)
|
||||
{
|
||||
@@ -786,7 +798,7 @@ void USGVirtualHandComponent::FImpl::UpdateVisibility()
|
||||
|
||||
if (bSetNewVisibility)
|
||||
{
|
||||
Owner->SetHiddenInGame(bHandDataAvailable);
|
||||
SetVisibility(bHandDataAvailable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "Components/PrimitiveComponent.h"
|
||||
#include "Components/SphereComponent.h"
|
||||
#include "Kismet/KismetMathLibrary.h"
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#include "UObject/UObjectGlobals.h"
|
||||
#include "XRDeviceVisualizationComponent.h"
|
||||
|
||||
@@ -430,7 +431,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
this, TEXT("RightThumbFingertipTouchCollider"));
|
||||
RightThumbFingertipTouchCollider->SetRelativeScale3D(RightHandSettings.TouchSettings.DefaultColliderSize);
|
||||
RightThumbFingertipTouchCollider->SetupAttachment(
|
||||
HandRight,RightHandSettings.TouchSettings.ThumbColliderSocketName);
|
||||
HandRight, RightHandSettings.TouchSettings.ThumbColliderSocketName);
|
||||
RightThumbFingertipTouchCollider->SetCastShadow(false);
|
||||
RightThumbFingertipTouchCollider->bCastDynamicShadow = false;
|
||||
RightThumbFingertipTouchCollider->SetReceivesDecals(true);
|
||||
@@ -1986,7 +1987,7 @@ void ASGPawn::FImpl::SetVisibility(USceneComponent* SceneComponent, const bool b
|
||||
return;
|
||||
}
|
||||
|
||||
SceneComponent->SetHiddenInGame(!bVisibility);
|
||||
SceneComponent->SetHiddenInGame(!bVisibility, false);
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -128,7 +130,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -233,7 +237,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -248,7 +254,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
|
||||
@@ -112,7 +112,9 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -127,7 +129,9 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
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"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
|
||||
@@ -59,7 +59,7 @@ struct SENSEGLOVESETTINGS_API FSGTrackingSettings
|
||||
|
||||
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 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
|
||||
#include "OpenXRHMD.h"
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3 */
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
|
||||
#include "SGCore/SGHapticGlove.h"
|
||||
#include "SGLog/SGLog.h"
|
||||
@@ -1164,9 +1163,28 @@ bool FSGXRTracker::GetMotionControllerData(
|
||||
{
|
||||
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(
|
||||
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(
|
||||
!OutMotionControllerData.bValid
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
#include "SGHMDTrackerKismetLibrary.generated.h"
|
||||
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary"))
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHMDTrackerKismetLibrary"))
|
||||
class SENSEGLOVETRACKINGKISMET_API USGHMDTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
class UObject;
|
||||
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary"))
|
||||
UCLASS(meta=(ScriptName = "SenseGloveXRTrackerKismetLibrary"))
|
||||
class SENSEGLOVETRACKINGKISMET_API USGXRTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#include "SGUtils/SGEngineUtils.h"
|
||||
|
||||
#include "CoreGlobals.h"
|
||||
#if WITH_EDITOR
|
||||
#include "Editor.h"
|
||||
#endif /* WITH_EDITOR */
|
||||
@@ -53,8 +54,21 @@ UWorld* FSGEngineUtils::GetWorld()
|
||||
if (IsValid(GEditor))
|
||||
{
|
||||
{
|
||||
const bool bIsPIE = GPlayInEditorID != -1;
|
||||
const int32 WorldPIEInstance = bIsPIE ? GPlayInEditorID : 1;
|
||||
const bool 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 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)};
|
||||
if (WorldContext)
|
||||
{
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user