Unreal Engine 交互SDK

1. 基本介绍

1.1. 环境要求

  • 本SDK需要配合UnrealEngine 5.0 以上版本,以及HandDriver手套和软件使用。

1.2. 样例工程

  • 本SDK提供样例工程(仅基于UE5.0提供样例),如需获取,请咨询宇叠商务。

1.3. 功能介绍

宇叠 UnrealEngine 交互 SDK 是一套为开发者设计的用于结合手套增强Unreal Engine中手部交互体验的软件开发工具包。本SDK包含两个核心组件:UdxHandControl(控制器组件)、UdGrab(抓握组件)。此外,SDK还提供了一个静态库文件,用于提供辅助功能和静态方法。

2. 开发准备

2.1. 检查文件

检查是否有HandDriver插件,并确保项目工程已支持UDEXREAL HandDriver UE5 SDK串流,如果还未支持,请先查看UE5插件使用手册,根据文档说明配置手套串流环境。

2.2. 插件安装

2.2.1. 导入插件

将插件解压缩包,然后拖动到项目工程的Plugins目录中即可(若没有Plugins文件夹则需要手动创建一个同名的)。

2.2.2. 启用插件

如果未启用,请先启用插件,已经启用请跳过此步骤。

3. 快速开始

3.1. 添加组件

3.1.1. 添加交互组件

  • 添加交互组件

    • 给pawn添加交互组件,与抓取组件搭配使用。此处需要两个,一个左手,一个右手的,根据实际需求添加。

  • 交互组件设置

1

初始化交互组件

2

添加更新动画事件

3

添加SimGrabOnTick函数

4

更新手骨骼动画

5

添加抓握触发/释放函数

名称
类型
默认值
说明

MotionControl

USeceneComponent

nullptr

控制对象的MotionControllerComponent

OtherHandComp

UdxGrabComponent

nullptr

另一只手的获取到的UdxGrabComponent

ThisHand

Enum

Left

触发左手的交互

TraceType

Enum

ForOneFrame

显示一帧检测球体

Radius

float

6.0

检测球体的半径

返回值

UdxGrabComponent

nullptr

返回当前手获取到的UdxGrabComponent

3.1.2. 添加动画蓝图

  • 创建动画蓝图,如果已经创建直接下一步

    • 创建细节:略

  • 创建变量 bool bIsPlayGrab、TArray<UdxHandBoneRotations> SHandBones

  • 给每个关节创建如下蓝图

  • 调整动画蓝图的变换节点,最终为握拳姿势

  • 添加Blend动画节点,用于切换动捕状态和交互状态

3.1.3. 添加抓取组件

  • 添加抓取组件

    • 给需要交互的道具添加抓取组件,与交互组件搭配使用。根据需求添加,交互时会识别与触发抓取函数的ThisHand相同的抓取组件,并抓取离其最近的一个。

  • 抓取组件设置

名称
类型
说明

GrabType

Enum

抓取类型,通过选择不同的类型实现不同的抓取逻辑

GrabOrientType

Enum

提示是否把道具对齐抓握的位置

GrabOrientAddCustomRotation

FRotator

交互后为道具添加自定义旋转偏移

GrabOrientAddCustomOffset

FVector

交互后为手模型添加自定义位置偏移

Enable

bool

是否启用此抓取组件

ThisGrabComponentFor

Enum

使用哪只手抓取此组件挂在的道具

SnapTypeOnOverlap

Enum

决定是交互道具静态还是可拾起移动的

BreakPenetrationConstraintDst

float

暂时未使用

SimulateOnDrop

bool

开启道具物理模拟

SimulatePhysCollision

bool

开启道具物理碰撞

ShowGrabPointCircleFX

bool

暂时未使用

StopFingerSimAfterDelay

bool

暂时未使用

WhenGrabbedReleaseFromOtherHands

bool

防止双手抓取同一个道具时出现不可逆现象

  • 添加组件被抓取/释放事件

3.2. 传输参数给交互组件

3.2.1. 初始化交互组件

事件开始运行时,把手部骨骼名字传入。(确保项目已启用HandDriver插件,未启用请查看启用HandDriver插件

3.2.2. 抓取和释放

  1. PC 开发(通过HandDriver插件的抓取事件触发)

  1. Android 开发

通过安卓sdk里的事件触发实现抓取和释放。 注:示意中的蓝图接口需要自己创建然后在安卓SDK的抓握事件触发处调用( 参考示例 )或使用PC开发方式。

  1. 安卓开发需要使用接口调用

4. 交互使用参考示例

4.1. 交互不可以移动对象(如门、推杆),下面以推杆为例

  1. 创建基类为Actor的蓝图

  1. 添加推杆的部件

  1. 添加抓握组件(⚠️抓握组件放在需要修改变换的部件下,如推杆的杆需要旋转,就放其下)

  1. 编写推杆旋转逻辑

注:本逻辑不涉及优化,只是提供一个使用此插件的教程,以及做该类对象时的思路,望理解

Last updated