滚轮旋转体拖拽监听事件的拖拽坐标修正问题

    void Start()
    {
        var m_camera = FindObjectOfType<UIRoot>().transform.FindChild("Camera").GetComponent<Camera>();
        UICamera.currentCamera = m_camera;
        UIEventListener.Get(gameObject).onDrag = gearOnDrag;
        UIEventListener.Get(gameObject).onDragStart = gearOnDragStart;
        UIEventListener.Get(gameObject).onDragEnd = gearOnDragEnd;
    }

    Vector3 m_gearDragPos = Vector3.zero;
    void gearOnDragStart(GameObject go)
    {
        var center = go.transform.localPosition;
        var touchPos = UICamera.currentTouch.pos;
        var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f));
        pos = UICamera.currentCamera.transform.InverseTransformPoint(pos);
        var axis = pos - center;
        m_gearDragPos = axis;
    }

    float m_lastEulerAngles;
    void gearOnDragEnd(GameObject go)
    {
        m_lastEulerAngles = go.transform.localEulerAngles.z;
    }

    void gearOnDrag(GameObject go, Vector2 delta)
    {
        var center = go.transform.localPosition;
        var touchPos = UICamera.currentTouch.pos;
        var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f));
        pos = UICamera.currentCamera.transform.InverseTransformPoint(pos);
        var axis = pos - center;
        var cross = Vector3.Cross(axis, m_gearDragPos);
        var angle = Vector3.Angle(axis, m_gearDragPos);
        var eulerAngles = cross.z < 0 ? angle : 360 - angle;
        go.transform.localEulerAngles = new Vector3(0, 0, eulerAngles + m_lastEulerAngles);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值