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;
    }
}
相关推荐
l1m0_8 分钟前
智能电动自行车管理后台实战:AI生成页面与React组件化技巧
前端·react.js·ui·ai·设计
~远在太平洋~4 小时前
06-鸿蒙系统 uitest UI 自动化指南
ui·自动化·harmonyos
兰亭妙微UI设计公司4 小时前
兰亭妙微QT界面开发:设计系统侧边导航组件:告别混乱,实现高效协同
ui
点心的游戏开发世界4 小时前
GDScript 入门笔记(二):变量与数据类型
笔记·游戏引擎·godot
一梭键盘任平生5 小时前
Shader入门笔记2
unity
点心的游戏开发世界13 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
点心的游戏开发世界15 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
我命由我1234520 小时前
Photoshop - Photoshop 把两个 PSD 文件合并
学习·ui·职场和发展·产品运营·产品经理·学习方法·photoshop
郝学胜-神的一滴1 天前
CMake 047:解锁安装阶段自定义操作,告别配置阶段提前执行坑
运维·服务器·c++·游戏引擎·图形渲染·opengl
李游Leo1 天前
【共创稿事节】 HarmonyOS 7 空间化 UI 实战:从平面布局到空间层级的界面重构
ui·平面·harmonyos