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 }