VirtualFramework/Assets/Scripts/TuringVR/TuringDraggableEx.cs
shenjianxing c8642b1afb 修复bug
2025-04-18 15:03:20 +08:00

97 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Turing.Samples;
using Turing.Core.EventSystems;
using UnityEngine.EventSystems;
using QFramework;
using UnityEngine.Events;
using DG.Tweening;
public class TuringDraggableEx : Draggable, IObjDrag
{
bool isOn = false;
UnityEvent<GameObject> OnDragEnd;
bool IObjDrag.isOn { get => isOn; set => isOn = value; }
Vector3 beginPos;
UnityEvent<GameObject> IObjDrag.OnDragEnd
{
get
{
if (OnDragEnd == null)
{
OnDragEnd = new UnityEvent<GameObject>();
}
return OnDragEnd;
}
}
Vector3 startPosition;
Vector3 startRotation;
private void Start()
{
isOn = false;
startPosition = gameObject.transform.localPosition;
startRotation = gameObject.transform.localEulerAngles;
}
public override void OnBeginDrag(PointerEventData eventData)
{
if (eventData.button != 0)
{
return;
}
beginPos = gameObject.Position();
if (isOn == false)
{
gameObject.transform.position = beginPos;
}
else
{
base.OnBeginDrag(eventData);
}
}
public override void OnDrag(PointerEventData eventData)
{
if (eventData.button != 0)
{
return;
}
if (isOn)
{
base.OnDrag(eventData);
}
else
{
gameObject.transform.position = beginPos;
}
}
public override void OnEndDrag(PointerEventData eventData)
{
if (eventData.button != 0)
{
return;
}
if (isOn)
{
base.OnEndDrag(eventData);
OnDragEnd?.Invoke(gameObject);
}
}
public void OnDoubleClick()
{
transform.DOLocalMove(startPosition, 0.1f);
transform.localEulerAngles = startRotation;
}
}