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;
    }
}
相关推荐
jtymyxmz27 分钟前
《Unity Shader》12.6 运动模糊
unity·游戏引擎
jtymyxmz3 小时前
《Unity Shader》12.4.2 实现
unity·游戏引擎
测试19984 小时前
简单的Web UI自动化测试框架Java实现
自动化测试·软件测试·selenium·测试工具·ui·职场和发展·测试用例
sindyra5 小时前
Unity UGUI 之 Canvas Scaler
unity·游戏引擎
好游科技8 小时前
高质量聊天交友社交类APP客户端UI解决方案
ui·交友·im即时通讯·社交软件·社交语音视频软件
在路上看风景9 小时前
2.Square Grid
unity
程序猿阿伟9 小时前
《突破Unity热更新瓶颈:底层函数调用限制与生态适配秘籍》
unity·游戏引擎
Howie Zphile10 小时前
做移动端的 Next.js 项目,可以选哪些 UI?
开发语言·javascript·ui
johnny23311 小时前
LLM交互工具汇总:Open WebUI、ChatBot-UI、浏览器插件、Studio
ui