Unity 鼠标拖拽旋转平面内2D物体 解决方案

比如音响的音量旋钮

具体逻辑:鼠标按下时期间每帧记录鼠标位置,算出由2D物体中心到鼠标的向量角度,根据角度变化相等地调节2D物体的旋转。

缺点:无法记录拖拽转了几圈

代码:

csharp 复制代码
using UnityEngine;
using UnityEngine.EventSystems;

public class knob : MonoBehaviour, IBeginDragHandler, IDragHandler
{
    Vector2 knobPos;
    RectTransform knobRT;
    float rotAngle = 0;
    float angleRecord = 0;
    float clickRecord = 0;

    private void Start()
    {
        knobPos = RectTransformUtility.WorldToScreenPoint(null,transform.position);
        knobRT = GetComponent<RectTransform>();
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        angleRecord = knobRT.localEulerAngles.z;
        clickRecord = Vector2Angle(Input.mousePosition);
    }

    public void OnDrag(PointerEventData eventData)
    {
        rotAngle = Vector2Angle(Input.mousePosition);
        //Debug.Log(rotAngle);
        knobRT.localEulerAngles = new Vector3(0, 0, angleRecord + rotAngle - clickRecord);
    }

    float Vector2Angle(Vector2 vector)
    {
        return Mathf.Atan2(vector.y - knobPos.y, vector.x - knobPos.x) / Mathf.PI * 180;
    }
}
相关推荐
Miss_SQ2 小时前
Webgl打包后删除StreamingAssets文件夹下多余资源
unity·c#·webgl
烟锁池塘柳02 小时前
【技术栈-前端】告别“转圈圈”:详解前端性能优化之“乐观 UI” (Optimistic UI)
前端·ui
Monkey_Xuan5 小时前
C#中的引用传递和值传递
unity·c#
CreasyChan5 小时前
C# LINQ 深度解析:优缺点与性能陷阱
unity·c#·游戏开发
yuegu7778 小时前
DevUI Modal 模态弹窗组件使用详解
ui·前端框架
少年张二狗10 小时前
Vue + Element-UI 图片上传实现拖拽排序功能
前端·vue.js·ui
sailing-data11 小时前
【UI Qt】入门笔记
开发语言·qt·ui
freshman11812 小时前
Unity动画控制
unity
L、21814 小时前
Flutter + OpenHarmony 分布式能力融合:实现跨设备 UI 共享与协同控制(终极篇)
javascript·分布式·flutter·ui·智能手机·harmonyos
IMPYLH14 小时前
Lua 的 xpcall 函数
开发语言·笔记·后端·游戏引擎·lua