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