> For the complete documentation index, see [llms.txt](https://udexreal.gitbook.io/udexreal-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://udexreal.gitbook.io/udexreal-docs/plugins/ue5-plugin-tutorial.md).

# UE5 Plugin Tutorial

This manual is intended for technical personnel who use UDEXREAL data gloves to develop UE5 projects. First-time users are advised to complete environment preparation, plug-in installation, Live Link connection, and example level verification in chapter order before proceeding to model parameter adjustment and advanced deployment.

## 1. Preparation Before Use

* Unreal Engine: UE5.0–5.7
* Target platforms: Supports Windows and Android packaging

### 1.1. Software and Plugin Preparation

* Before configuring your UE project, install and launch UDEXREAL HandDriver on your local machine first.
* Download HandDriver UE plugin package

{% embed url="<https://drive.google.com/drive/folders/1cIm43_Z8UShFuoNd2q3F_n0a2T_iszYB?usp=drive_link>" %}

### 1.2. Version Compatibility Requirements

Please use with HandDriver version 2.1.3 or later.

## 2. Plugin Installation and Quick Verification

### 2.1. Launch UDEXREAL HandDriver

Launch UDEXREAL HandDriver on your computer, and confirm that the data gloves are properly connected and can continuously output data.&#x20;

For instructions on installing and calibrating HandDriver and connecting the gloves, please refer to

{% content-ref url="/pages/mZXVKTqkEhpFIznRkpoQ" %}
[Software Instruction](/udexreal-docs/software-instruction/software-instruction.md)
{% endcontent-ref %}

#### 2.1.1. Data Transmission Setting

Enable data sending in HandDriver and record the sending port. The UE Live Link data source must use the same port.&#x20;

For detailed settings, refer to

{% content-ref url="/pages/EhMJSyJ4h6Z0bj8mUAwR" %}
[Data Transmission](/udexreal-docs/software-instruction/software-instruction/data-transmission.md)
{% endcontent-ref %}

### 2.2. Install and Enable the Plugin

{% stepper %}
{% step %}
Create a Plugins folder in the root directory of the UE project (skip this step if it already exists).
{% endstep %}

{% step %}
Copy the entire HandDriver plugin into "\<Project Directory>/Plugins". You can also install it to the UE engine plugin directory, but project-level installation makes version isolation easier (choose either option).

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FDIBoPqQSvOWafmWswBcL%2F%E6%96%B0%E5%AF%B9%E8%AF%9D%20(1).png?alt=media&amp;token=748d9242-161c-4541-9a1e-f85ac07701a7" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FV1j8OsTQD4Dil5DSlkOh%2F%E6%96%B0%E5%AF%B9%E8%AF%9D.png?alt=media&amp;token=d3a936dd-c82f-4e44-8d72-98c1a4554cb3" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Reopen the project. If UE prompts you to compile modules, complete the compilation according to your project environment.
{% endstep %}

{% step %}
Select "Edit → Plugins", search for HandDriver, and confirm that the plugin is enabled. Restart the editor as prompted.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FgVZ3xqGaYzxHSHHFYm3v%2Fimage.png?alt=media&amp;token=30618d9f-1861-4291-a52b-72b06b1db178" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### 2.3. Establish a LiveLink Connection

**Pre-check**: The data gloves are powered on, HandDriver is running, and the connection status in HandDriver is normal.

In the UE editor, select "Window → Virtual Production → Live Link" to open the Live Link panel.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FJ7iAFeSYg11bahKFfavF%2Fimage.png?alt=media&amp;token=15ff277a-7102-42a0-8628-959538833980" alt="" width="563"><figcaption></figcaption></figure>

In the Live Link panel, expand "Source" and confirm that a HandDriver source can be added.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FCOOcNHJxS8g0MlyZD7gn%2Fimage.png?alt=media&amp;token=d1d49eea-ca54-454a-8237-a93a4b891227" alt="" width="563"><figcaption></figcaption></figure>

{% stepper %}
{% step %}
Add a HandDriver Source, and enter "IP:Port" in the connection string.
{% endstep %}

{% step %}
The port must match HandDriver's sending port; the default listening address 0.0.0.0 usually does not need to be modified.
{% endstep %}

{% step %}
Click OK. After a successful connection, Device1/Device2 will be displayed; if only one glove is connected, only Device1 will be displayed.
{% endstep %}

{% step %}
Confirm that a green status dot appears next to the device. If it does not turn green, check for port conflicts, firewall settings, sender status, and network connectivity.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F9UxhYmpZ6FM8yz6VtR76%2Fimage.png?alt=media&amp;token=bcd6abfa-3dd1-4dec-a8df-36d8a08db650" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Select the Skeletal Mesh Actor to be driven, and add a Hand component in the "Details" panel.
{% endstep %}

{% step %}
Continue by adding a LiveLinkComponentController component.
{% endstep %}

{% step %}
In Subject Representation, select the data source to receive (e.g., p or teleop). If only one glove is connected and the role name is teleop, select teleop.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FcdeWfpYkGgrkHz4rXFuB%2Fimage.png?alt=media&amp;token=ee9bc68e-77a5-4dbe-8f19-15628b7ae5f1" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FT6fwdlSKFb0oaQaNP3Nk%2Fimage.png?alt=media&amp;token=63c247b6-4c93-4f95-a766-0ee4faa36cd3" alt="" width="413"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FLh7wXP8W6BqNRW0xa3V9%2Fimage.png?alt=media&amp;token=7f5c1c3a-328b-465d-8491-3e679c6410c5" alt="" width="470"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### 2.4. Verify with the Example Level

The plugin provides an example level. It is recommended to complete the example verification first before integrating it into a formal project.

In the Content Browser, open HandDriverContent/Map/Map\_UdxRealTest.

{% columns %}
{% column width="66.66666666666666%" %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fy8nhJlifTB1gWqSvSlgH%2Fimage.png?alt=media&amp;token=3f37eefe-f0e0-4d96-9750-83e060999ac7" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="33.33333333333334%" %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FhUlqgfLqnzbs7hYrppnr%2Fimage.png?alt=media&amp;token=99fdb19c-6f18-407d-8a60-3adb7f4ce672" alt="" width="197"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

* The example level includes multiple preset models and their hand parameters, which can serve as a baseline for project configuration.
* Select the preset closest to your target model and fine-tune it based on the actual skeleton and hand shape.
* Run the level to confirm that finger bending, spreading, thumb rotation, and left/right hand mapping all work correctly.

## 3. Model Adaptation and Parameter Calibration

### 3.1. Model and Skeleton Requirements

Before integrating full-body motion capture, first confirm that the data gloves and the target model have consistent hand bone definitions. The target model should meet the following requirements:

* The bone axes of the wrist joint and all its child joints are consistent (i.e., the coordinate system orientation is the same when each joint is selected).
* After all bone local rotation values of the model's hand are set to zero, the initial pose of the hand model is four fingers together and straight.
* After all bone local rotation values of the model's hand are set to zero, the coordinate system axes of all finger bones (excluding the wrist joint but including all thumb joints) must point toward their child joints.

{% stepper %}
{% step %}
Open the character animation blueprint, and add the full-body motion capture node "Live Link Pose" in the AnimGraph.
{% endstep %}

{% step %}
Add the glove node "Udexreal Hand Pose".
{% endstep %}

{% step %}
Add "Blend Hand Data In Mocap", connect the full-body motion capture data to Mo Cap, and connect the glove data to Hand.
{% endstep %}

{% step %}
Connect the output of Blend Hand Data In Mocap to Output Pose.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FWEoyoPkuLK0edHHYdruk%2Fimage.png?alt=media&amp;token=c8b55518-9a1c-4d49-a46f-8c3a16e034ad" alt="" width="563"><figcaption></figcaption></figure>

<mark style="color:red;">Note: For projects with complex animation blueprints, if you cannot configure the animation blueprint correctly, it is recommended to first keep the node sequence "Udexreal Hand Pose" → "Blend Hand Data In Mocap (Hand)" → "Output Pose" at the end of the animation blueprint node chain, and connect the other nodes to the "Mo Cap" input of "Blend Hand Data In Mocap". If the hand movements can be driven successfully in this setup, then try adjusting the animation blueprint according to your project's actual situation. See the figure below for an example:</mark>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F9mEVDNjUvYnBZ8G1BsW2%2Fimage.png?alt=media&amp;token=9b880bf7-bb52-4c87-b246-0da5a3043cc7" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
After launching the plugin, first check the automatic bone matching result.
{% endstep %}

{% step %}
If automatic matching fails, select the Hand component and fill in the model's left and right hand bone names item by item into the corresponding configuration fields.
{% endstep %}

{% step %}
You can also set up bone node mappings in the Blueprint class and place an instance of the character into the scene.
{% endstep %}

{% step %}
Please verify the motion while the scene is running or in streaming state; depending on the UE version and environment, real-time motion may not be observable in the Blueprint preview.
{% endstep %}
{% endstepper %}

{% columns %}
{% column %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FYeVM5OhP7FS9K225d8Pg%2Fimage.png?alt=media&amp;token=6f12e8a1-421e-4f6e-a570-0704bdbdb3ac" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F2F5Yhi1wMLU7f3gWXlbS%2Fimage.png?alt=media&amp;token=fed80572-3e75-4afb-ae20-46a45bd131b4" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

### 3.2. Calibrate Finger Rotation Axes

* It is recommended to calibrate in the order Pitch → Yaw → Roll.

1. Open the model's skeleton tree and switch the transform coordinate system to the object coordinate system.
2. Select any finger joint, press W to display the translation axes, and observe the axis and positive/negative direction corresponding to downward bending of the joint.
3. Set that axis as Pitch. For example, if downward bending corresponds to +X, set Pitch=X.
4. Observe the axis corresponding to the outward spreading of the five fingers and set it as Yaw. For example, if it corresponds to -Y, set Yaw=-Y.
5. Set the remaining rotation axis as Roll. For example, if it corresponds to -Z, set Roll=-Z.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FZtMkAVipx4UyRSfQj3qp%2Fimage.png?alt=media&amp;token=14f8f73e-518d-4289-82e2-dfc089e5835f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F3Tbqb4elY8skdHpiZPnm%2Fimage.png?alt=media&amp;token=2293b12c-826d-4be6-91f3-ecb76e972ce0" alt="" width="375"><figcaption></figcaption></figure>

After calibration is complete, the hand motions can be displayed. If the joint rotation directions are incorrect, repeat the calibration until the correct result is achieved (the Yaw and Roll values are usually different, but in some cases they must be identical to achieve the correct effect, as shown in the figure below):

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fbsf0fQK0XkbPGeyXALCY%2Fimage.png?alt=media&amp;token=c4fb1211-8e4a-45be-b95d-0d5ff9e62d69" alt="" width="353"><figcaption></figcaption></figure>

#### 3.2.1. Reference video

**Note:** The XYZ axis in this video is represented by the following numbers (-X=-3, -Y=-2, -Z=-1, X=0, Y=1, Z=2), and its principle is the same as the above.

{% embed url="<https://drive.google.com/file/d/1opgewEX0blMymdnAIPJmhWuXaqPabv9k/view?usp=drive_link>" %}

### 3.3. Thumb Parameter Adjustment:

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FIrmdwtVsGrJoSh3qJQob%2Fimage.png?alt=media&amp;token=fecfae16-9e88-4380-92a5-f22098ab435d" alt="" width="334"><figcaption></figcaption></figure>

#### 3.3.1. The Thumb Coefficient:

Adjust the inward bending coefficient of the thumb during real-time streaming (coefficient range 0-1) , the lower the value of the thumb root node coefficient, the smaller the degree of inward bending; the higher the value of the thumb root node coefficient, the greater the degree of inward bending.

#### 3.3.2. Thumb Pitch/Yaw/Roll Offset:

Adjust the deviation coefficient of the X, Y, and Z axes of the thumb during rotation (This deviation is actually an angle, you can drag the cursor into the input box, or directly fill in the angle value to observe the effect), During real-time streaming, you can adjust the rotation direction of the thumb by adjusting the values of the three axes to achieve the optimal effect (Note: To see the adjusted effect, you need to release the mouse after adjusting the value).

#### 3.3.3. Thumb Pitch/Yaw/Roll Axis:

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FqdUepYdH40Tgqd1bPRW6%2Fimage.png?alt=media&amp;token=537265b9-2099-498d-aa96-cd4b3a93d0b2" alt="" width="329"><figcaption></figcaption></figure>

After selecting Adjustment for Thumb Axis, the rotation coordinate system of the thumb Pitch, Yaw, and Roll can be individually calibrated without affecting the rotation coordinate system of other four fingers.

#### 3.3.4. Thumb Performance Adjustment When MetaHuman Hands Are Brought Together

<table><thead><tr><th width="172.5">Parameter</th><th>Description</th></tr></thead><tbody><tr><td>Is Enable</td><td>Enable this feature</td></tr><tr><td>Thumb 01 Pitch</td><td>Adjust the pitch angle of the first thumb joint in this state</td></tr><tr><td>Thumb 01 Yaw</td><td>Adjust the yaw angle of the first thumb joint in this state</td></tr><tr><td>Thumb 02 Pitch</td><td>Adjust the pitch angle of the second thumb joint in this state</td></tr><tr><td>Thumb 03 Pitch</td><td>Adjust the pitch angle of the third thumb joint in this state</td></tr></tbody></table>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FP8dqKVLIwOxUiPac7wY2%2Fimage.png?alt=media&amp;token=b19e5df8-e97a-4022-a358-397fe315c6a8" alt=""><figcaption></figcaption></figure>

### 3.4. Parameter Saving and Reuse

After adjusting the parameters, the data can be saved, which is convenient for data migration and reuse. The following is a reference video of how to use it.

{% file src="/files/ScGj5WsMj7U7AjjDYTzP" %}

#### 3.4.1. Data Saving

1. Click Save Setting.
2. Select a save folder under the Content directory.
3. Confirm that new parameter data has been generated in the target folder.
4. If you need to reuse it across UE versions, right-click the data and export it as CSV.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FDyxKA9aSpJYsZ1tjNvFm%2Fimage.png?alt=media&amp;token=66adbab5-100b-434e-89ee-98a94cea4b2e" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FFWaGFPjey1aC7MX9rwgy%2Fimage.png?alt=media&amp;token=53eb1eef-53d1-4574-80cb-65a664ef417a" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FNb3MUByL7iegRuQFU9vw%2Fimage.png?alt=media&amp;token=cb373f15-40ec-4cd9-a0e1-792e7b97da82" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FjdVUh1as4cHJX08z9eZR%2Fimage.png?alt=media&amp;token=2a781566-81a2-41df-9445-309c012a739a" alt="" width="563"><figcaption></figcaption></figure>

#### 3.4.2. Importing and Using Data

When importing a CSV from an external source, set the Row Type to HandDriverStructSetting.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FtisSIE6LWsU7GYz0exrO%2Fimage.png?alt=media&amp;token=843c41a8-4fb1-4457-be69-975ace806401" alt="" width="563"><figcaption></figcaption></figure>

Select the target DataTable in the HandDriverSetting property of the Hand component to switch parameters.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F0rQOJxe3qCtuhq1yChIJ%2Fimage.png?alt=media&amp;token=4f28ae9e-55f8-4133-87a4-0847c971673a" alt="" width="563"><figcaption></figcaption></figure>

### 3.5. Using IK Retargeting to Drive the Hand Model

When the finger bone axes of the target model are inconsistent with the plugin's standard model, or when it is not suitable to adjust parameters item by item, IK retargeting can be used.

{% columns %}
{% column width="50%" %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FO1ERD7tbcPU3o2jczQeg%2Fimage.png?alt=media&amp;token=8cba0dcb-3139-4100-afe6-7c3ada505197" alt=""><figcaption></figcaption></figure>

Finger bones are oriented along the finger axis, CORRECT
{% endcolumn %}

{% column width="50.00000000000002%" %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FjA7VFR20dGTjXZuXLmd6%2Fimage.png?alt=media&amp;token=b385df38-3c4c-4b17-ac25-4464de4c6ea6" alt=""><figcaption></figcaption></figure>

Finger bones are NOT oriented along the finger axis, WRONG. Please modify bone axis or retargeting
{% endcolumn %}
{% endcolumns %}

1. Find the **f\_med\_nrw\_body** in the test demo of the plugin, which is the standard skeleton of metahuman, and we have completed the parameter adjustment in the hand component for it. You can directly use this as the source of retargeting driver.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F5STPgnh6Fi2FpB4ChVNx%2Fimage.png?alt=media&amp;token=1f07d220-2db3-488a-b3ee-180f790ab0c0" alt=""><figcaption></figcaption></figure>

2. You can refer to the official documentation for creating and using Ik binding: [IK Rig Retargeting ](https://dev.epicgames.com/documentation/en-us/unreal-engine/ik-rig-animation-retargeting-in-unreal-engine?application_version=5.3)and [runtime IK Retargeting ](https://dev.epicgames.com/documentation/en-us/unreal-engine/runtime-ik-retargeting-in-unreal-engine?application_version=5.3). It should be noted that the fingers of the source model are not in a straight state. When adjusting the retargeting device, pay attention to adjusting the curvature of the finger joints to achieve the target effect

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FwFIcgJJk6vUqNx3A8AUT%2Fimage.png?alt=media&amp;token=24a4ee3d-da9e-46e3-b1cd-7b6ad2b4c79b" alt="" width="563"><figcaption></figcaption></figure>

### 3.6. Adapting to VRM Models

The thumb bone axes of VRM models usually do not point along the finger direction, and adjusting only the thumb axis parameters may not achieve stable results.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F48Wcjgh7FJthQWwDiFYE%2Fimage.png?alt=media&amp;token=6bb033ff-37b6-42af-88f2-77b39f48f559" alt="" width="500"><figcaption></figcaption></figure>

For VRM models, enable UseVrmModel in the Hand component. Once enabled, the plugin will automatically adapt to the VRM thumb bones, so there is generally no need to calibrate the thumb axes separately.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fymjj2PTyngj5Xsf61ZnI%2Fimage.png?alt=media&amp;token=60b7060a-9691-408e-8ce9-7458455f8ab1" alt=""><figcaption></figcaption></figure>

### 3.7. Adjusting MetaHuman Parameters

The default hand pose of MetaHuman has all five fingers bent and spread, so additional finger parameter adjustments are required. Other models with a similar initial hand pose can also refer to this section.

Select "UdxValue\_MetaHumanMesh" in HandDriverStructSetting to quickly fill in the preset parameters.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F53qGSaKyTG8DI8iRzGi0%2Fimage.png?alt=media&amp;token=b9249af1-b385-42ec-b7ce-67fc87a2bdea" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F8Lh1DaQQGcWR54wELt6d%2Fimage.png?alt=media&amp;token=eb4c9097-ecc8-4ce1-a324-7aabbceaa6d9" alt="" width="333"><figcaption></figcaption></figure>

#### **3.7.1. Four-Finger Yaw Offset**

* Index: index finger yaw adjustment;
* Middle: middle finger yaw adjustment;
* Ring: ring finger yaw adjustment;
* Pinky: pinky yaw adjustment;

The above values can be adjusted when the fingers are straight and close, that is, the distance between the fingers when the fingers are straight and close. The reference experience values are shown in the above figure (-10, 0, -12, -18), but please adjust according to the actual situation.

#### **3.7.2. Straighten Finger**

This option is "Straighten Finger". When enabled, it will automatically straighten the bent finger (only for MetaHuman, the effect is not guaranteed for other models). Please choose whether to enable it according to the actual situation.

#### **3.7.3. Four-Finger Pitch Offset**

This parameter applies to the situation where the finger cannot be straightened, that is, the user's actual finger is straightened, but the model is not straightened. This parameter applies to the pitch of the root joint and the middle joint of the four fingers. This plugin has enabled the "StraightenFinger" option for the MeteHuman model. **Usually, there is no need to adjust this parameter**.

#### **3.7.4. Finger Spacing Coefficient**

This parameter is "finger spacing parameter". It is recommended to adjust it when making a fist. The reference experience value is 5, but please adjust it according to the actual situation.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fo2UDXF7r1Hy0qvFohUgF%2Fimage.png?alt=media&amp;token=e585a7e3-7a27-49e6-a194-f508581fad70" alt="" width="330"><figcaption></figcaption></figure>

**Note**: The above parameter adjustments can basically satisfy the states of fingers straight and together and making a fist, but there may be certain differences due to variations in individual hand shapes, calibration accuracy, glove fit, etc.

#### **3.7.5.** Empirical Values for MetaHuman Hand Parameters

The following empirical values are applicable to common MetaHuman hands and can be used as initial values; please refer to the actual performance of the target model.

{% columns %}
{% column %}

<figure><img src="broken://files/He9F0QgtnrCGM1FEqjYd" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="broken://files/DafrpQj4mKoxEfjNvz6d" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

## 4. Advanced Features and Deployment

### 4.1. Functional Description of the Glove Controller (Joystick Buttons)

Starting from V2.1.3, HandDriver supports the glove with controllers (joystick and buttons), **ONLY the plugin after V1.3.0 supports the controllers.**

{% content-ref url="/pages/HPeSDK0LHsLz83PVqucZ" %}
[UE5 Plugin Tutorial of Controllers (For V1.3.1 and Above)](/udexreal-docs/plugins/ue5-plugin-tutorial/ue5-plugin-tutorial-of-controllers-for-v1.3.1-and-above.md)
{% endcontent-ref %}

### 4.2. Cross-Device Multiplayer

When more than two gloves need to be run on one computer, you can run the HandDriver software on other computers to send data to the current device.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FB7vkAEnq6QYis9IcKOR3%2Fimage.png?alt=media&amp;token=c8f16b7c-7bd9-4ba9-af74-8a6ad5b57008" alt="" width="563"><figcaption></figcaption></figure>

1. Other computers send data to an unused port number (e.g., 7777) on the current device.
2. Add a new source in LiveLink, make sure the port number is filled correctly.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fn965oXmzoa6XNZ1ObnSA%2Fimage.png?alt=media&amp;token=82adb0e3-3a90-469f-a86c-5fde3eb43a7f" alt="" width="563"><figcaption></figcaption></figure>

3. At this moment, multiple devices can be seen in LiveLink.
4. Confirm that each data source uses a unique port.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F2SuvO1OvGdPKUXnJS7EX%2Fimage.png?alt=media&amp;token=5301593f-e8bf-46c2-b27b-a546b0362b2b" alt="" width="563"><figcaption></figcaption></figure>

5. Confirm that Subjects from multiple devices are visible in Live Link, and that their status dots are green.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fd7RooutQGmzkwm7xehXZ%2Fimage.png?alt=media&amp;token=d619e2b6-2877-4778-b63b-5227b1d5a0af" alt="" width="563"><figcaption></figcaption></figure>

6. Select the Actor in the scene, and in the Subject Representation drop-down list of the LiveLinkComponentController, select the device used to drive that Actor.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F0qUBOMPhTR2e2I2ZYprP%2Fimage.png?alt=media&amp;token=bd112701-5895-4892-a515-926dca76c1e0" alt="" width="563"><figcaption></figcaption></figure>

### 4.3. Creating a Live Link Source at Runtime

In some packaged projects, the Live Link "Source" list is cleared after a restart, causing the character to stop receiving glove data. You can create a data source at runtime, or use the plugin's preset Blueprint.

Please choose either of the following solutions according to your project structure:

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FZY8LHMUCBnu1EU6Qm180%2Fimage.png?alt=media&amp;token=2892ddd6-fc64-439e-ba97-a4a94213c9fa" alt="" width="524"><figcaption></figcaption></figure>

#### 4.3.1. Solution 1: Create a Data Source in the Character Blueprint

1. Ensure that the SubjectRepresentation in the **LiveLinkComponentController** component of the Actor that needs hand motion capture has the glove's **teleop** selected (if it shows None, you need to first perform the glove LiveLink connection described in the previous steps).

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fu3rfZbLTjUidWxBhGGXN%2Fimage.png?alt=media&amp;token=c84b6802-aec5-4330-82df-9436ac92cbfd" alt="" width="563"><figcaption></figcaption></figure>

2. Open the target Actor Blueprint, and after Event BeginPlay, add a Delay node and a Create HandDriver LiveLink Source at Runtime node in sequence.
3. Promote the return value Handle of Create HandDriver LiveLink Source at Runtime to a variable, name it HandDriverSource, and complete the connections.
4. Fill in 0.0.0.0:5555 in ConnectString; the port must match HandDriver's sending port.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FNTyvxGH2EYqxztto1GUx%2Fimage.png?alt=media&amp;token=42d4fad6-bf2f-4360-8583-7903d503f363" alt="" width="563"><figcaption></figcaption></figure>

5. After Event End Play, add a Remove Source node and pass the HandDriverSource variable as a parameter.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FLIDKg2sfVesW73RfWZ8n%2Fimage.png?alt=media&amp;token=54255aa2-0b39-48e2-a93b-a33be50df85a" alt="" width="563"><figcaption></figcaption></figure>

6. Compile and save the Blueprint. Even if the Live Link list does not have the HandDriver Source saved in advance, the data source can still be created at runtime and drive the character.

#### 4.3.2. Solution 2: Use the Plugin's Preset Object

Place the plugin's preset Blueprint object (BP\_UdexLiveLinkSource/BP\_UdxLiveLinkSource) \[this object uses port 5555] into the scene. It is recommended to place only one per scene.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2Fg7ccffWHceOYnrcHqh6I%2Fimage.png?alt=media&amp;token=b771d9a4-3f2e-4818-a07b-407ed4f6b685" alt=""><figcaption></figcaption></figure>

### 4.4. Adding a LiveLink Data Source When Using UDEXREAL Glove Service in a Headset

Click 👉 to view:

{% content-ref url="/pages/8ugjFTkBaDOXQZTPDv3d" %}
[VR Headset Android Glove Service Manual](/udexreal-docs/gloves-in-vr-headsets/vr-headset-android-glove-service-manual.md)
{% endcontent-ref %}

You can copy the configuration below and paste it directly into UE, or refer to the example Pawn. On Windows, WinRole needs to be modified; on Android, the example default values can be used.

{% code overflow="wrap" %}

```cpp
(Subject=
(Name="AndroidService"),Role=/Script/CoreUObject.Class'"/Script/LiveLinkInterface.LiveLinkAnimationRole"')
```

{% endcode %}

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2F4Tgrnqq47UUlB0EKf7Ki%2Fimage.png?alt=media&amp;token=687b8cb8-4dd1-4133-a62c-95c49ad8364a" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FpPweAUGhEaomgAppaaA4%2Fimage.png?alt=media&amp;token=ed4390cb-c581-4e93-acd0-96e96b94dfe4" alt=""><figcaption></figcaption></figure>

## 5. FAQ

### 5.1. A New Live Link Source Appears After Modifying the Role Name

**Cause:**

* Live Link caches connected role names; after the role name changes, it is recognized as a new data source.

**Solution:**

* Update the Subject/role name originally bound to the character to the new role name.

### 5.2. The Character Cannot Be Driven After Switching to a New Data Source

**Solution:**

Select the target character in the scene, and click the reset icon next to the data source selection item; then re-establish the Live Link connection according to Section 2.3, and select the latest data source for the character.

<figure><img src="https://2082502898-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8s1Ia6TfFovgyJ5JsDJZ%2Fuploads%2FyUuHLesBV5nIzF8LXu2F%2Fimage.png?alt=media&amp;token=2878102c-f9f5-496a-825d-92b02d24c138" alt=""><figcaption></figcaption></figure>

### **5.3.** Only Some Characters Can Be Driven After Packaging Solution:

* Check whether the Hand component, bone mapping, and Live Link Subject of the character that cannot be driven are configured correctly.
* Check whether the character's calibration status is updated synchronously with the sending end.

### 5.4. Hand Does Not Move in UE 5.5 Edit Mode

**Solution:**

* This phenomenon does not affect the normal use of the plugin in play mode.
* Use a new Blueprint configured according to this manual or the example project Blueprint for testing, and check the model's hand movements in play mode.
