相关文档与SDK下载地址:Hi5 2.0 插件下载 - Powered By Noitom Internet Team
一、 Unity VR 基础环境配置
请使用 Unity 2019.x/2020.x/2021.x LTS 版本新建工程,Unity 2022 版本正在适配中。
1. 插件下载
下载最新版本 Steam VR Unity 插件。
硬件请确保应用的是 Steam VR Lighthouse 方案 2.0,并安装 steam 和 steamvr 软件。
定位基站:SteamVR Base Station 2.0
追踪器:HTC Vive Tracker 2.0/3.0
2. 插件安装
1) 新建或打开 Unity 工程
2) 打开插件文件夹,将 Assets 文件夹中 SteamVR 目录拷贝到 Unity 工程中的 Assets文件夹中
。(当然这还有很多插件导入的方式,比如下载Steam VR plunge,然后导入工程。或再Unity 商店中下载插件进行导入。)
3) 然后等待插件导入
4) SteamVR 插件导入成功后,弹窗中点击 UnityXR 按钮,然后点击 Accept All 按钮,
5) 安装完成后会弹出 Project Settings,显是 OpenVR Loader 插件处于应用状态,表示
插件安装成功,(弹框选择点击 Accept All 按钮)如图所示:
完成以上配置后即可在窗口中找到
SteamVR Input
按钮,点击
Windows ->SteamVR Input
若弹出
Copy Examples
弹窗,点击
Yes
按钮,然后等待导入和编译。
二、 Hi5_2 交互 SDK 安装
Unity VR
环境配置完成后,先安装
Hi5-2 SDK
,再安装交互
SDK
。
1) 先导入 Hi5-2 SDK :
Hi5_2_Package_Vive.unitypackage
2) 再导入交互 SDK:
Hi5_2_Interaction_Vive.unitypackage
备注:导入SDK方法:点击->Assets->Importing Package->Custom Package…找到SDK文件,进行确认。
三、 Hi5_2 交互 SDK 应用
1. 工程设置
点击
Edit ->Project Settings
打开工程设置窗口,如图所示:
1.1 设置 Tags and Layers
Layer 8 Hi5OtherFingerTail
Layer 9 Hi5OtherFingerOther
Layer 10 Hi5Palm
Layer 11 Hi5ObjectGrasp
Layer 12 Hi5Plane
Layer 13 Hi5ObjectTrigger
Layer 14 Hi5IndexFingerTail
1.2 设置 Physics
2. 场景设置
打开示例场景 TableScene_Vive,参考其设置,如图所示
场景中必须包含以下内容:
1) Hi5 Interaction Manager
2) Hi5_Interaction_Objects
3) Hi5_Interaction_Simple_Objects
4) Hi5_Left_Hand_C ,Hi5_Right_Hand_C ,Hi5_Left_Hand_V ,Hi5_Right_Hand_V
3. 物体设置
3.1 普通交互物体设置
物体设置分为父级物体和子级物体设置,父级物体 Layer 要设置为 Hi5ObjectGrasp,子
级物体 Layer 要设置为 Hi5ObjectTrigger,例如 Interaction_Object_4 ->Cube,设置如
图所示:
3.2 组合物体设置
组合物体分为三层, 组合物体的最外层物体 Layer 设置为 Default,组合物体中的外层物体
的 Layer 设 置 为 Hi5ObjectGrasp , 组 合 物 体 中 的 内 层 物 体 的 Layer 设 置 为 Hi5ObjectTrigger,例如 Interaction_Compound_Object_10,设置如图所示:
3.3 简单物体设置
简单物体只有抓握等功能,自身不会产生运动,当抓住释放后会停留在原位置,其 Layer
要设置为 Hi5ObjectGrasp,例如 Interaction_Simple_Object_2,设置如图所示:
3.4 桌面物体
桌面放置物体的 Layer 要设置为 Hi5_Plane,例如 Box001,设置如图所示:
4. 按钮设置
例如 Button_Interaction_3,设置如图所示:
之后就可以点击运行啦
四、 相关接口
1. 手相关接口
Hi5_Interface_Hand 脚本
一、手状态
enum E_Interface_Hand_State
{
ERelease = -1,
EPinch = 2,
ELift = 4,
}
E_Interface_Hand_State GetHandState(out int interactionObjectId)E_Interface_Hand_State 返回手部状态,interactionObjectId 返回交互物体 Id 索引
二、手姿态识别状态
enum Hi5_Glove_Gesture_Recognition_State {
ENone = 0,
EOk,
EFist,
EIndexPoint,
EHandPlane
}
Hi5_Glove_Gesture_Recognition_State GetRecognitionState()Hi5_Glove_Gesture_Recognition_State 返回手当前状态
2. 手事件接口
public void MessageFun(string messageKey, object param1, object param2)
{
if (messageKey.CompareTo(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKe y.messageHandEvent) == 0)
{
Hi5_Glove_Interaction_Hand_Event_Data data = param1 as Hi5_Glove_Interaction_Hand_Event_Data;
switch (data.mEventType)
{
case EEventHandType.EClap:
{
//拍击事件
} break;
case EEventHandType.EPoke:
{
//戳事件
} break;
case EEventHandType.EPinch:
{
//抓取事件
} break;
case EEventHandType.EThrow:
{
//抛出事件
} break;
case EEventHandType.ELift:
{
//托举事件
} break;
case EEventHandType.ERelease:
{
//释放事件
}break;
}
}
}
3. 交互物体接口
Hi5_Interface_Object
交互物体状态
enum E_Object_State {
ENone = -1,
EStatic = 1,
EPinch = 3,
EMove = 2,
EClap = 4,
EFlyLift = 5,
EPoke = 6,
}
E_Object_State GetObjectItemState();获取交互物体状态int GetObjectId();返回交互物体 Id
交互物体事件
public void MessageFun(string messageKey, object param1, object
param2){
if (messageKey.CompareTo(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKe y.messageObjectEvent) == 0)
{
Hi5_Glove_Interaction_Object_Event_Data data = param1 as Hi5_Glove_Interaction_Object_Event_Data;
if (data.mObjectId == ObjectItem.idObject)
{
switch (data.mEventType)
{
case EEventObjectType.EClap:
{
}break;
case EEventObjectType.EPoke:
{
}break;
case EEventObjectType.EPinch:
{
}break;
case EEventObjectType.EMove:
{
}break;
case EEventObjectType.ELift:
{
}break;
case EEventObjectType.EStatic:
if (mItem != null) {
mItem.ResetCorlor();
}break;
}
}
}
}
4. 按钮接口
Hi5_Interface_Button virtual public void MessageFun(string messageKey, object param1, object param2)
{
if (messageKey.CompareTo(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKe y.messageObjectEvent) == 0)
{
Hi5_Glove_Interaction_Object_Event_Data data = param1 as Hi5_Glove_Interaction_Object_Event_Data;
if (data.mObjectId == ObjectItem.idObject)
{
if (data.mEventType == EEventObjectType.EClap)
{
}else if (data.mEventType == EEventObjectType.EPoke)
{
}else if (data.mEventType == EEventObjectType.EStatic)
{
}
}
}
}
备注:
运行时,电脑防火墙要关闭。