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;
    }
}
相关推荐
Artistation Game1 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰1 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
妙为1 小时前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
dangoxiba4 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
先生沉默先21 小时前
使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
学习·unity·贴图
神一样的老师1 天前
如何解决 Photoshop 中的“暂存盘已满”错误
ui·photoshop
十画_8241 天前
Visual Studio 小技巧记录
unity·visual studio
red_redemption1 天前
cpp,git,unity学习
git·unity·游戏引擎
tealcwu1 天前
【Unity踩坑】Unity更新Google Play结算库
unity·游戏引擎
先生沉默先1 天前
unity 默认渲染管线材质球的材质通道,材质球的材质通道
unity·游戏引擎·材质