曲线视觉编辑器,初步

This commit is contained in:
2025-07-01 19:10:31 +08:00
parent 7fee6d651a
commit ffb97c6d28
11 changed files with 3475 additions and 94 deletions

View File

@@ -1,5 +1,6 @@
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
namespace Michsky.MUIP
{
@@ -8,10 +9,11 @@ namespace Michsky.MUIP
[Header("Resources")]
public RectTransform dragArea;
public RectTransform dragObject;
public RectTransform draggerRect;
[Header("Settings")]
public bool topOnDrag = true;
public bool Lock = false;
private Vector2 originalLocalPointerPosition;
private Vector3 originalPanelLocalPosition;
@@ -58,23 +60,29 @@ namespace Michsky.MUIP
public void OnBeginDrag(PointerEventData data)
{
originalPanelLocalPosition = DragObjectInternal.localPosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(DragAreaInternal, data.position, data.pressEventCamera, out originalLocalPointerPosition);
gameObject.transform.SetAsLastSibling();
if (topOnDrag == true) { dragObject.transform.SetAsLastSibling(); }
if (!Lock && (draggerRect == null || RectTransformUtility.RectangleContainsScreenPoint(GetComponent<RectTransform>(), Mouse.current.position.ReadValue())))
{
originalPanelLocalPosition = DragObjectInternal.localPosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(DragAreaInternal, data.position, data.pressEventCamera, out originalLocalPointerPosition);
gameObject.transform.SetAsLastSibling();
if (topOnDrag == true) { dragObject.transform.SetAsLastSibling(); }
}
}
public void OnDrag(PointerEventData data)
{
Vector2 localPointerPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(DragAreaInternal, data.position, data.pressEventCamera, out localPointerPosition))
if (!Lock && (draggerRect == null || RectTransformUtility.RectangleContainsScreenPoint(GetComponent<RectTransform>(), Mouse.current.position.ReadValue())))
{
Vector3 offsetToOriginal = localPointerPosition - originalLocalPointerPosition;
DragObjectInternal.localPosition = originalPanelLocalPosition + offsetToOriginal;
}
Vector2 localPointerPosition;
ClampToArea();
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(DragAreaInternal, data.position, data.pressEventCamera, out localPointerPosition))
{
Vector3 offsetToOriginal = localPointerPosition - originalLocalPointerPosition;
DragObjectInternal.localPosition = originalPanelLocalPosition + offsetToOriginal;
}
ClampToArea();
}
}
private void ClampToArea()