桌面虚拟摇杆

虚拟摇杆

基于UGUI的IDragHandler, IEndDragHandler, IPointerDownHandler接口实现。
1.鼠标指针移动到摇杆区域,记录鼠标指针和摇杆之间的偏移;
2.OnDrag不断更新摇杆位置;
3.Update更新移动的方向

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
/// <summary>
/// 虚拟摇杆
/// </summary>
public class VirtualJoy : MonoBehaviour, IDragHandler, IEndDragHandler, IPointerDownHandler
{
    bool isDrag;

    Vector3 offest;
    Vector3 origionPos;
    Vector2 moveDirction;
    
    public float radius;//半径
    public static event UnityAction<Vector2> OnMoveDirection;

    void Start()
    {
        isDrag = false;
        offest = Vector3.zero;
        origionPos = transform.localPosition;
        moveDirction = Vector2.zero;

    }


    public void OnPointerDown(PointerEventData eventData)
    {
        offest = Input.mousePosition - transform.localPosition;
    }

    public void OnDrag(PointerEventData eventData)
    {
        isDrag = true;
        transform.localPosition = Input.mousePosition - offest;
        //移动距离超出半径  重置位置    
        if (Vector3.Distance(transform.localPosition, origionPos) >= radius)
        {
            var moveDirection = transform.localPosition - origionPos;
            var newPos = moveDirection.normalized * radius + origionPos;
            transform.localPosition = newPos;
        }
        //获取新的 移动方向
        moveDirction = transform.localPosition - origionPos;
        //标椎化
        moveDirction = moveDirction / radius;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        isDrag = false;
        offest = Vector3.zero;
        moveDirction = Vector2.zero;
        transform.localPosition = origionPos;
    }

    void Update()
    {
        if (isDrag)
        {
            OnMoveDirection?.Invoke(moveDirction);
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值