您当前的位置: 首页 >  unity
  • 3浏览

    0关注

    193博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

unity手游实现方向盘效果(转动、回转、角度限制)

我寄人间雪满头丶 发布时间:2021-09-06 17:04:30 ,浏览量:3

效果 手指或鼠标拖动方向盘旋转,有角度限制,松手后自动回转。 在这里插入图片描述 代码 将代码添加到方向盘Image上。 注意需要赋值Canvas。

using UnityEngine;
using UnityEngine.EventSystems;

public class SteeringWheel : MonoBehaviour,IDragHandler,IEndDragHandler,IBeginDragHandler
{
    public Canvas CanvasRoot;//需要指定画布 

    private bool m_IsFirst = true;           //用于记录第一帧按下鼠标时鼠标的位置,便于计算
    private Vector3 m_CurrentPos;            //记录当前帧鼠标所在位置
    private bool m_IsClockwise;              //是否顺时针
    private float m_RoundValue = 0;          //记录总的旋转角度 用这个数值来控制一圈半
    private bool m_IsTuringSteeringWheel;    //是否在转方向盘 用这个判断复位

    public void OnDrag(PointerEventData eventData)
    {
        m_IsTuringSteeringWheel = true;
        Vector2 pos;
        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(CanvasRoot.GetComponent(),
#if !UNITY_EDITOR
                Input.GetTouch(0).position,
#else
                Input.mousePosition,
#endif
            CanvasRoot.worldCamera, out pos))    //获取鼠标点击位置
        {
            Vector3 pos3 = new Vector3(pos.x, pos.y, 0);                           //计算后鼠标以方向盘圆心为坐标原点的坐标位置
            pos3 = CanvasRoot.transform.TransformPoint(pos3); //转换为世界坐标

            if (m_IsFirst)
            {
                m_CurrentPos = pos3;
                m_IsFirst = false;
            }
            Vector3 currentPos = Vector3.Cross(pos3 - transform.position, m_CurrentPos - transform.position);             //计算当前帧和上一帧手指位置 用于判断旋转方向
            if (currentPos.z > 0)
            {
                m_IsClockwise = true;
            }
            else if (currentPos.z = 0)
            {
                m_RoundValue -= 8f;               //复位速度
                if (m_RoundValue  0)
                    m_RoundValue = 0;
                transform.rotation = Quaternion.Euler(new Vector3(0, 0, -m_RoundValue));
            }
        }
    }
}
关注
打赏
1648518768
查看更多评论
立即登录/注册

微信扫码登录

0.8935s