diff --git a/Assets/07.RKVoiceCommand/RunTime.meta b/Assets/07.RKTools/RunTime.meta
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime.meta
rename to Assets/07.RKTools/RunTime.meta
diff --git a/Assets/07.RKTools/RunTime/AddInteraction.meta b/Assets/07.RKTools/RunTime/AddInteraction.meta
new file mode 100644
index 0000000..0f44794
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/AddInteraction.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 198b77f2e2fe1e149bdb8e23f2c74b20
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs b/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs
new file mode 100644
index 0000000..56afc77
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs
@@ -0,0 +1,154 @@
+using System.Collections;
+using System.Collections.Generic;
+using Rokid.UXR.Interaction;
+using Stary.Evo;
+using UnityEngine;
+
+public abstract class RKAddInteraction : MonoBehaviour
+{
+ #region 触摸
+ ///
+ /// 添加触摸事件
+ ///
+ /// 被触碰物体
+ /// 触碰后事件
+ public virtual void ObjectAddTouchEvent(GameObject Touchedobject, System.Action TouchEvent, float TouchScale = 1.2f)
+ {
+ Collider ObjectCollider = Touchedobject.GetComponent();
+ GrabInteractable GrabInteractable = Touchedobject.GetComponent();
+
+ // 原有的组件设置优先级最高
+ if (ObjectCollider == null)
+ {
+ ObjectCollider = Touchedobject.AddComponent();
+ ObjectCollider.isTrigger = true;
+ }
+
+ if (GrabInteractable == null)
+ {
+ GrabInteractable = Touchedobject.AddComponent();
+ GrabInteractable.rate = TouchScale;
+ }
+
+ GrabInteractable.OnHoverBegin.AddListener(()=>TouchEvent?.Invoke(Touchedobject));
+ }
+
+ ///
+ /// 暂停触摸事件
+ ///
+ /// 被触碰物体
+ public virtual void ObjectPauseTouchEvent(GameObject Touchedobject)
+ {
+ Collider ObjectCollider = Touchedobject.GetComponent();
+ if (ObjectCollider != null)
+ {
+ ObjectCollider.enabled = false;
+ }
+ }
+
+ ///
+ /// 恢复触摸事件
+ ///
+ /// 被触碰物体
+ public virtual void ObjectResumeTouchEvent(GameObject Touchedobject)
+ {
+ Collider ObjectCollider = Touchedobject.GetComponent();
+ if (ObjectCollider != null)
+ {
+ ObjectCollider.enabled = true;
+ }
+ }
+
+ ///
+ /// 移除触摸事件
+ ///
+ /// 被触碰物体
+
+ public virtual void ObjectRemoveTouchEvent(GameObject Touchedobject)
+ {
+ GrabInteractable GrabInteractable = Touchedobject.GetComponent();
+
+ if (GrabInteractable != null)
+ {
+ GrabInteractable.OnHoverBegin.RemoveAllListeners();
+ Destroy(GrabInteractable);
+ }
+ }
+
+ #endregion
+
+ #region 拖动
+
+ ///
+ /// 添加拖动事件
+ ///
+ /// 被拖动物体
+ /// 拖动时执行的方法
+ public virtual void objectAddDrag(GameObject Dragedobject, System.Action DragingEvent = null, float DragScale = 1.2f)
+ {
+ Collider ObjectCollider = Dragedobject.GetComponent();
+ GrabInteractable GrabInteractable = Dragedobject.GetComponent();
+ Rigidbody Rigidbody = Dragedobject.GetComponent();
+ Throwable Throwable = Dragedobject.GetComponent();
+
+ // 原有的组件设置优先级最高
+ if (ObjectCollider == null)
+ {
+ ObjectCollider = Dragedobject.AddComponent();
+ ObjectCollider.isTrigger = true;
+ }
+
+ if (GrabInteractable == null)
+ {
+ GrabInteractable = Dragedobject.AddComponent();
+ GrabInteractable.rate = DragScale;
+ }
+
+ if (Rigidbody == null)
+ {
+ Rigidbody = Dragedobject.AddComponent();
+ Rigidbody.useGravity = false;
+ }
+
+ if (Throwable == null)
+ {
+ Throwable = Dragedobject.AddComponent();
+ }
+
+ GrabInteractable.OnHeldUpdate.AddListener(()=>DragingEvent?.Invoke(Dragedobject));
+ }
+
+ ///
+ /// 暂停拖动
+ ///
+ ///
+ public virtual void objectPauseDrag(GameObject Dragedobject)
+ {
+ Collider ObjectCollider = Dragedobject.GetComponent();
+ if (ObjectCollider!= null) ObjectCollider.enabled = false;
+ }
+
+ ///
+ /// 恢复拖动
+ ///
+ ///
+ public virtual void objectResumeDrag(GameObject Dragedobject)
+ {
+ Collider ObjectCollider = Dragedobject.GetComponent();
+ if (ObjectCollider!= null) ObjectCollider.enabled = true;
+ }
+
+ public virtual void objectRemoveDrag(GameObject Dragedobject)
+ {
+ Throwable Throwable = Dragedobject.GetComponent();
+ GrabInteractable GrabInteractable = Dragedobject.GetComponent();
+ if (Throwable != null) Destroy(Throwable);
+ if (GrabInteractable != null)
+ {
+ GrabInteractable.OnHeldUpdate.RemoveAllListeners();
+ Destroy(GrabInteractable);
+ }
+ }
+ #endregion
+
+}
diff --git a/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs.meta b/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs.meta
new file mode 100644
index 0000000..3c99305
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/AddInteraction/RKAddInteraction.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e5cbdc9e864eefd4fba9661707859b6e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/07.RKTools/RunTime/GestureRecognition.meta b/Assets/07.RKTools/RunTime/GestureRecognition.meta
new file mode 100644
index 0000000..75a4aca
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/GestureRecognition.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cba726e4bef03144c99f9e7ef6fa0de8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs b/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs
new file mode 100644
index 0000000..9f3767d
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs
@@ -0,0 +1,128 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Rokid.UXR.Interaction;
+
+public abstract class GestureBase : MonoBehaviour
+{
+ private GestureBean leftBean = null;
+ private GestureBean rightBean = null;
+
+ protected void OnEnable()
+ {
+ GesEventInput.OnTrackedSuccess += OnTrackedSuccess;
+ GesEventInput.OnTrackedFailed += OnTrackedFailed;
+ GesEventInput.OnRenderHand += OnRenderHand;
+ }
+
+ protected void OnDisable()
+ {
+ GesEventInput.OnTrackedSuccess -= OnTrackedSuccess;
+ GesEventInput.OnTrackedFailed -= OnTrackedFailed;
+ GesEventInput.OnRenderHand -= OnRenderHand;
+ }
+
+ protected void FixedUpdate()
+ {
+ if (leftBean!=null)
+ {
+ GestureType type= GesEventInput.Instance.GetGestureType(HandType.LeftHand);
+ Vector3 handForward = GetSkeletonPose(SkeletonIndexFlag.PALM, HandType.LeftHand).forward;
+ GestureLeftSuccess(type,handForward);
+ }
+ else
+ {
+ GestureLeftFail();
+ }
+
+ if (rightBean != null)
+ {
+ GestureType type= GesEventInput.Instance.GetGestureType(HandType.RightHand);
+ Vector3 handForward = GetSkeletonPose(SkeletonIndexFlag.PALM, HandType.RightHand).forward;
+ GestureRightSuccess(type,handForward);
+ }
+ else
+ {
+ GestureRightFail();
+ }
+ }
+
+ private void OnTrackedSuccess(HandType handType)
+ {
+
+ }
+
+ private void OnTrackedFailed(HandType handType)
+ {
+ if (handType == HandType.None)
+ {
+ leftBean = null;
+ rightBean = null;
+ }
+
+ if (handType == HandType.RightHand)
+ {
+ rightBean = null;
+ }
+
+ if (handType == HandType.LeftHand)
+ {
+ leftBean = null;
+ }
+ }
+
+ private void OnRenderHand(HandType handType, GestureBean gestureBean)
+ {
+ if (handType == HandType.RightHand)
+ {
+ rightBean = gestureBean;
+ }
+
+ if (handType == HandType.LeftHand)
+ {
+ leftBean = gestureBean;
+ }
+
+ if (handType == HandType.None)
+ {
+ rightBean = null;
+ leftBean = null;
+ }
+ }
+
+
+ ///
+ /// 获取骨架点位置
+ ///
+ /// 骨架序号
+ /// 哪只手
+ ///
+ public Pose GetSkeletonPose(SkeletonIndexFlag index, HandType hand)
+ {
+ return GesEventInput.Instance.GetSkeletonPose(index, hand);
+ }
+
+
+ ///
+ /// 获取手地朝向
+ ///
+ /// 哪只手
+ ///
+ public Vector3 GetHandForward(HandType handType)
+ {
+ Vector3 handForward = (GetSkeletonPose(SkeletonIndexFlag.MIDDLE_FINGER_MCP, handType).position -
+ GetSkeletonPose(SkeletonIndexFlag.WRIST, handType).position);
+ return handForward;
+ }
+
+
+ #region 需要被重写的方法
+
+ public abstract void GestureLeftSuccess(GestureType gestureType, Vector3 handForward);
+ public abstract void GestureRightSuccess(GestureType gestureType, Vector3 handForward);
+ public abstract void GestureLeftFail();
+ public abstract void GestureRightFail();
+
+ #endregion
+
+}
diff --git a/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs.meta b/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs.meta
new file mode 100644
index 0000000..bcab2e4
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/GestureRecognition/GestureBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d59c6f28c5e793c43a03e7ba7be931d8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/07.RKVoiceCommand/RunTime/RKVoiceCommand.RunTime.asmdef b/Assets/07.RKTools/RunTime/RKTools.RunTime.asmdef
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/RKVoiceCommand.RunTime.asmdef
rename to Assets/07.RKTools/RunTime/RKTools.RunTime.asmdef
diff --git a/Assets/07.RKVoiceCommand/RunTime/RKVoiceCommand.RunTime.asmdef.meta b/Assets/07.RKTools/RunTime/RKTools.RunTime.asmdef.meta
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/RKVoiceCommand.RunTime.asmdef.meta
rename to Assets/07.RKTools/RunTime/RKTools.RunTime.asmdef.meta
diff --git a/Assets/07.RKTools/RunTime/RKVoiceCommand.meta b/Assets/07.RKTools/RunTime/RKVoiceCommand.meta
new file mode 100644
index 0000000..1a82da4
--- /dev/null
+++ b/Assets/07.RKTools/RunTime/RKVoiceCommand.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 97334fe27b1e8f2488496b4eebec0377
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/07.RKVoiceCommand/RunTime/IVoiceCommandSystem.cs b/Assets/07.RKTools/RunTime/RKVoiceCommand/IVoiceCommandSystem.cs
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/IVoiceCommandSystem.cs
rename to Assets/07.RKTools/RunTime/RKVoiceCommand/IVoiceCommandSystem.cs
diff --git a/Assets/07.RKVoiceCommand/RunTime/IVoiceCommandSystem.cs.meta b/Assets/07.RKTools/RunTime/RKVoiceCommand/IVoiceCommandSystem.cs.meta
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/IVoiceCommandSystem.cs.meta
rename to Assets/07.RKTools/RunTime/RKVoiceCommand/IVoiceCommandSystem.cs.meta
diff --git a/Assets/07.RKVoiceCommand/RunTime/VoiceCommandController.cs b/Assets/07.RKTools/RunTime/RKVoiceCommand/VoiceCommandController.cs
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/VoiceCommandController.cs
rename to Assets/07.RKTools/RunTime/RKVoiceCommand/VoiceCommandController.cs
diff --git a/Assets/07.RKVoiceCommand/RunTime/VoiceCommandController.cs.meta b/Assets/07.RKTools/RunTime/RKVoiceCommand/VoiceCommandController.cs.meta
similarity index 100%
rename from Assets/07.RKVoiceCommand/RunTime/VoiceCommandController.cs.meta
rename to Assets/07.RKTools/RunTime/RKVoiceCommand/VoiceCommandController.cs.meta
diff --git a/Assets/07.RKVoiceCommand/package.json b/Assets/07.RKTools/package.json
similarity index 64%
rename from Assets/07.RKVoiceCommand/package.json
rename to Assets/07.RKTools/package.json
index 3580afe..ff9b23a 100644
--- a/Assets/07.RKVoiceCommand/package.json
+++ b/Assets/07.RKTools/package.json
@@ -1,8 +1,8 @@
{
- "name": "com.staryevo.rkvoicecommand",
- "version": "1.0.3",
- "displayName": "07.RKVoiceCommand",
- "description": "Rokid语音命令工具",
+ "name": "com.staryevo.rktools",
+ "version": "1.0.0",
+ "displayName": "07.RKTools",
+ "description": "Rokid工具",
"unity": "2021.3",
"unityRelease": "23f1",
"keywords": [
diff --git a/Assets/07.RKVoiceCommand/package.json.meta b/Assets/07.RKTools/package.json.meta
similarity index 100%
rename from Assets/07.RKVoiceCommand/package.json.meta
rename to Assets/07.RKTools/package.json.meta