UI Tookit的简易摇杆

因为 UI Tookit 自带的PointerUpEvent和PointerMoveEvent只能在点击区域内相应,快速移动或者限制UI移动范围会导致断触,随手用协程鼓捣了,现版本的EventSystem和Uitookit联系的还很不完善,谁有好的方法指教一下。

public class JoyDrag: MonoBehaviour
{
private VisualElement _mVisualElement;
private Vector2 _pos;
private bool _canMove;
private Vector2 _diff;
private Coroutine _corMove;

private Vector3 _initialPosition;
public int radio;

void Start()
{
UIDocument document = GetComponent<UIDocument>();
var root = document.rootVisualElement;
_mVisualElement = root.Q<VisualElement>("Point");
_initialPosition = _mVisualElement.transform.position;
_mVisualElement.RegisterCallback<PointerDownEvent>(OnPointerDown);
}

private void OnPointerDown(PointerDownEvent evt)
{
//在这里处理按下鼠标时的操作
Vector2 mousePosition = Mouse.current.position.ReadValue();
_pos = RuntimePanelUtils.ScreenToPanel(_mVisualElement.panel, new Vector2(mousePosition.x, Screen.height - mousePosition.y));
_canMove = true;
_diff = _pos - (Vector2)_mVisualElement.transform.position;
_corMove=StartCoroutine("Move");
}

IEnumerator Move()
{
while (Mouse.current.leftButton.isPressed)
{
//在这里处理按下鼠标并拖拽时的操作
Vector2 mousePosition = Mouse.current.position.ReadValue();
_pos = RuntimePanelUtils.ScreenToPanel(_mVisualElement.panel, new Vector2(mousePosition.x, Screen.height - mousePosition.y));
if (_canMove)
{
_pos.x -= _diff.x;
_pos.y -= _diff.y;

_pos = Vector2.ClampMagnitude(_pos, radio);
_mVisualElement.transform.position = _pos;
}
yield return null;
}
//在这里处理松开鼠标时的操作
_canMove = false;
_mVisualElement.transform.position = _initialPosition;
}
}

UItookit 简易摇杆

  • 35
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值