【m】添加图像识别

This commit is contained in:
2025-05-19 15:42:24 +08:00
parent 9362a57d80
commit 53902896c0
8 changed files with 488 additions and 379 deletions

View File

@@ -4,151 +4,158 @@ using Rokid.UXR.Interaction;
using Stary.Evo;
using UnityEngine;
public static class RKAddInteractionExtension
namespace Stary.Evo.RKTools
{
#region
/// <summary>
/// 添加触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
/// <param name="TouchEvent">触碰后事件</param>
public static void ObjectAddTouchEvent(this GameObject Touchedobject, System.Action<GameObject> TouchEvent, float TouchScale = 1.2f)
public static class RKAddInteractionExtension
{
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
GrabInteractable GrabInteractable = Touchedobject.GetComponent<GrabInteractable>();
#region
// 原有的组件设置优先级最高
if (ObjectCollider == null)
/// <summary>
/// 添加触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
/// <param name="TouchEvent">触碰后事件</param>
public static void ObjectAddTouchEvent(this GameObject Touchedobject, System.Action<GameObject> TouchEvent,
float TouchScale = 1.2f)
{
ObjectCollider = Touchedobject.AddComponent<BoxCollider>();
ObjectCollider.isTrigger = true;
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
GrabInteractable GrabInteractable = Touchedobject.GetComponent<GrabInteractable>();
// 原有的组件设置优先级最高
if (ObjectCollider == null)
{
ObjectCollider = Touchedobject.AddComponent<BoxCollider>();
ObjectCollider.isTrigger = true;
}
if (GrabInteractable == null)
{
GrabInteractable = Touchedobject.AddComponent<GrabInteractable>();
GrabInteractable.rate = TouchScale;
}
GrabInteractable.OnHoverBegin.AddListener(() => TouchEvent?.Invoke(Touchedobject));
}
if (GrabInteractable == null)
/// <summary>
/// 暂停触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectPauseTouchEvent(this GameObject Touchedobject)
{
GrabInteractable = Touchedobject.AddComponent<GrabInteractable>();
GrabInteractable.rate = TouchScale;
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
if (ObjectCollider != null)
{
ObjectCollider.enabled = false;
}
}
GrabInteractable.OnHoverBegin.AddListener(()=>TouchEvent?.Invoke(Touchedobject));
/// <summary>
/// 恢复触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectResumeTouchEvent(this GameObject Touchedobject)
{
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
if (ObjectCollider != null)
{
ObjectCollider.enabled = true;
}
}
/// <summary>
/// 移除触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectRemoveTouchEvent(this GameObject Touchedobject)
{
GrabInteractable GrabInteractable = Touchedobject.GetComponent<GrabInteractable>();
if (GrabInteractable != null)
{
GrabInteractable.OnHoverBegin.RemoveAllListeners();
Object.Destroy(GrabInteractable);
}
}
#endregion
#region
/// <summary>
/// 添加拖动事件
/// </summary>
/// <param name="Dragedobject">被拖动物体</param>
/// <param name="DragingEvent">拖动时执行的方法</param>
public static void objectAddDrag(this GameObject Dragedobject, System.Action<GameObject> DragingEvent = null,
float DragScale = 1.2f)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
GrabInteractable GrabInteractable = Dragedobject.GetComponent<GrabInteractable>();
Rigidbody Rigidbody = Dragedobject.GetComponent<Rigidbody>();
Throwable Throwable = Dragedobject.GetComponent<Throwable>();
// 原有的组件设置优先级最高
if (ObjectCollider == null)
{
ObjectCollider = Dragedobject.AddComponent<BoxCollider>();
ObjectCollider.isTrigger = true;
}
if (GrabInteractable == null)
{
GrabInteractable = Dragedobject.AddComponent<GrabInteractable>();
GrabInteractable.rate = DragScale;
}
if (Rigidbody == null)
{
Rigidbody = Dragedobject.AddComponent<Rigidbody>();
Rigidbody.useGravity = false;
}
if (Throwable == null)
{
Throwable = Dragedobject.AddComponent<Throwable>();
}
GrabInteractable.OnHeldUpdate.AddListener(() => DragingEvent?.Invoke(Dragedobject));
}
/// <summary>
/// 暂停拖动
/// </summary>
/// <param name="Dragedobject"></param>
public static void objectPauseDrag(this GameObject Dragedobject)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
if (ObjectCollider != null) ObjectCollider.enabled = false;
}
/// <summary>
/// 恢复拖动
/// </summary>
/// <param name="Dragedobject"></param>
public static void objectResumeDrag(this GameObject Dragedobject)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
if (ObjectCollider != null) ObjectCollider.enabled = true;
}
public static void objectRemoveDrag(this GameObject Dragedobject)
{
Throwable Throwable = Dragedobject.GetComponent<Throwable>();
GrabInteractable GrabInteractable = Dragedobject.GetComponent<GrabInteractable>();
if (Throwable != null) Object.Destroy(Throwable);
if (GrabInteractable != null)
{
GrabInteractable.OnHeldUpdate.RemoveAllListeners();
Object.Destroy(GrabInteractable);
}
}
#endregion
}
/// <summary>
/// 暂停触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectPauseTouchEvent(this GameObject Touchedobject)
{
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
if (ObjectCollider != null)
{
ObjectCollider.enabled = false;
}
}
/// <summary>
/// 恢复触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectResumeTouchEvent(this GameObject Touchedobject)
{
Collider ObjectCollider = Touchedobject.GetComponent<Collider>();
if (ObjectCollider != null)
{
ObjectCollider.enabled = true;
}
}
/// <summary>
/// 移除触摸事件
/// </summary>
/// <param name="Touchedobject">被触碰物体</param>
public static void ObjectRemoveTouchEvent(this GameObject Touchedobject)
{
GrabInteractable GrabInteractable = Touchedobject.GetComponent<GrabInteractable>();
if (GrabInteractable != null)
{
GrabInteractable.OnHoverBegin.RemoveAllListeners();
Object.Destroy(GrabInteractable);
}
}
#endregion
#region
/// <summary>
/// 添加拖动事件
/// </summary>
/// <param name="Dragedobject">被拖动物体</param>
/// <param name="DragingEvent">拖动时执行的方法</param>
public static void objectAddDrag(this GameObject Dragedobject, System.Action<GameObject> DragingEvent = null, float DragScale = 1.2f)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
GrabInteractable GrabInteractable = Dragedobject.GetComponent<GrabInteractable>();
Rigidbody Rigidbody = Dragedobject.GetComponent<Rigidbody>();
Throwable Throwable = Dragedobject.GetComponent<Throwable>();
// 原有的组件设置优先级最高
if (ObjectCollider == null)
{
ObjectCollider = Dragedobject.AddComponent<BoxCollider>();
ObjectCollider.isTrigger = true;
}
if (GrabInteractable == null)
{
GrabInteractable = Dragedobject.AddComponent<GrabInteractable>();
GrabInteractable.rate = DragScale;
}
if (Rigidbody == null)
{
Rigidbody = Dragedobject.AddComponent<Rigidbody>();
Rigidbody.useGravity = false;
}
if (Throwable == null)
{
Throwable = Dragedobject.AddComponent<Throwable>();
}
GrabInteractable.OnHeldUpdate.AddListener(()=>DragingEvent?.Invoke(Dragedobject));
}
/// <summary>
/// 暂停拖动
/// </summary>
/// <param name="Dragedobject"></param>
public static void objectPauseDrag(this GameObject Dragedobject)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
if (ObjectCollider!= null) ObjectCollider.enabled = false;
}
/// <summary>
/// 恢复拖动
/// </summary>
/// <param name="Dragedobject"></param>
public static void objectResumeDrag(this GameObject Dragedobject)
{
Collider ObjectCollider = Dragedobject.GetComponent<Collider>();
if (ObjectCollider!= null) ObjectCollider.enabled = true;
}
public static void objectRemoveDrag(this GameObject Dragedobject)
{
Throwable Throwable = Dragedobject.GetComponent<Throwable>();
GrabInteractable GrabInteractable = Dragedobject.GetComponent<GrabInteractable>();
if (Throwable != null) Object.Destroy(Throwable);
if (GrabInteractable != null)
{
GrabInteractable.OnHeldUpdate.RemoveAllListeners();
Object.Destroy(GrabInteractable);
}
}
#endregion
}
}