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;
    }
}
相关推荐
向宇it1 小时前
【blender小技巧】Blender导出带贴图的FBX模型,并在unity中提取材质模型使用
开发语言·unity·c#·游戏引擎·blender·材质·贴图
Bartender_Jill3 小时前
【Claude AI大语言模型连接Blender生成资产】Windows安装Blender MCP教程
人工智能·语言模型·json·游戏引擎·blender
大模型铲屎官4 小时前
# Unity动画控制核心:Animator状态机与C#脚本实战指南 (Day 29)
c语言·unity·c#·游戏引擎·游戏开发·动画控制·animator状态机
努力长头发的程序猿5 小时前
UnityUI:Canvas框架获取鼠标悬浮UI
unity·c#
好名字08215 小时前
vue2改变el-message字体、图标尺寸样式(vue2,element-ui)
开发语言·javascript·ui
UI设计兰亭妙微9 小时前
探索 UI 设计服务:提升用户体验的关键力量
ui·ux
虾球xz10 小时前
游戏引擎学习第224天
android·学习·游戏引擎
zaizai100719 小时前
Unity 动画
unity
向宇it1 天前
【unity游戏开发入门到精通——UGUI】CanvasScaler画布缩放器组件
游戏·unity·c#·编辑器·游戏引擎
向宇it1 天前
【unity游戏开发介绍之UGUI篇】UGUI概述和基础使用
开发语言·unity·c#·编辑器·游戏引擎