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;
    }
}
相关推荐
B0URNE4 小时前
【Unity基础详解】(11)Unity核心:输入系统
unity·游戏引擎
小小8程序员6 小时前
C# XAML中x:Type的用法详解
开发语言·ui·c#
Aevget6 小时前
界面控件DevExpress WinForms中文教程:Data Grid - 如何获取汇总值?
ui·.net·界面控件·winform·devexpress
世洋Blog6 小时前
Unity开发微信小游戏-减少WASM包体大小
unity·游戏引擎·wasm·微信小游戏
TO_ZRG7 小时前
Unity 通过 NativePlugin 接入Android SDK 指南
android·unity·游戏引擎
jtymyxmz10 小时前
《Unity Shader》10.2.1 镜子效果
unity·游戏引擎
ellis197010 小时前
Unity打开新项目Package相关报错处理记录
unity
reddingtons10 小时前
Illustrator 3D Mockup:零建模,矢量包装一键“上架”实拍
人工智能·ui·3d·aigc·illustrator·设计师·平面设计
言之。11 小时前
AI时代的UI发展
人工智能·ui
微:xsooop11 小时前
iOS 上架4.3a 审核4.3a 被拒4.3a 【灾难来袭】
flutter·unity·ios·uniapp