摇杆控制

ui方面

关键就是将屏幕坐标转换为ui坐标
要注意的是想摇杆中间的点在点击时保持正确位置就要将点和背景放在同一级目录下分别设置位置

在这里插入图片描述
代码部分:

void Update()
    {
        bool pressing;
        Vector2 pos;
        if (Application.isEditor)
            GetPressingInfoInEditor(out pressing, out pos);
        else
            GetPressingInfoInPhone(out pressing, out pos);
        SetIcon(pressing, pos);
    }

    #region 摇杆控制
    void GetPressingInfoInEditor(out bool pressing, out Vector2 pos)
    {
        if (Input.GetMouseButton(0))
        {
            pressing = true;
            Vector2 uiPos = Vector3.one;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                        Input.mousePosition, UICamera, out uiPos);
            pos = uiPos;
        }
        else
        {
            pressing = false;
            pos = Vector3.zero;
        }
    }

    void GetPressingInfoInPhone(out bool pressing, out Vector2 pos)
    {
        if (Input.touchCount > 0)
        {
            pressing = true;
            Vector2 uiPos = Vector3.one;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                        Input.mousePosition, UICamera, out uiPos);
            pos = uiPos;
        }
        else
        {
            pressing = false;
            pos = Vector3.zero;
        }
    }

    void SetIcon(bool pressing, Vector2 pos)
    {
        if (pressing)
        {
            if (!isPressing)
            {
                trans_Controller.gameObject.SetActive(true);
                trans_Bg.anchoredPosition = pos;
                trans_DirGo.anchoredPosition = pos;
                centerPos =  trans_DirGo.anchoredPosition;
                isPressing = true;
            }
            else
            {
                SetTouchPointPos(pos);
            }

        }
        else
        {
            trans_Controller.gameObject.SetActive(false);
            isPressing = false;
        }
    }

    void SetTouchPointPos(Vector2 pos)
    {
        Vector2 touch = pos;
        Vector2 to;
        float distance = Vector2.Distance(centerPos, touch);
        if (distance < radius)
            to = touch;
        else
        {
            Vector2 dir = touch - centerPos;
            dir.Normalize();
            to = dir * radius;
            to += centerPos;
        }
        trans_DirGo.anchoredPosition = to;
    }

    #endregion

本文参考https://blog.csdn.net/qq_33205561/article/details/89028711

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值