欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)

 更新時(shí)間:2021年06月06日 17:11:01   作者:ᴸᴵᴬᴺᴳᴬᴬ  
這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下

跟隨鼠標(biāo)旋轉(zhuǎn)

第一種效果是跟隨鼠標(biāo)旋轉(zhuǎn),原理是計(jì)算下鼠標(biāo)位置與拖拽物體的相對(duì)位移

旋轉(zhuǎn)方向即可

注意轉(zhuǎn)換對(duì)應(yīng)空間坐標(biāo)

新建腳本mono類繼承 IBeginDragHandler, IDragHandler, IEndDragHandler 接口

[SerializeField] private Canvas m_Canvas;
    
    private Vector3? CalculateWorldToScreenPos(Vector3 worldPos)
    {
        if (m_Canvas.renderMode == RenderMode.ScreenSpaceCamera)
        {
            return m_Canvas.worldCamera.WorldToScreenPoint(worldPos);
        }
        else if (m_Canvas.renderMode == RenderMode.ScreenSpaceOverlay)
        {
            Vector3 screenPos = m_Canvas.transform.InverseTransformPoint(worldPos);
            var rectTrans = m_Canvas.transform as RectTransform;
            screenPos.x += rectTrans.rect.width * 0.5f * rectTrans.localScale.x;
            screenPos.y += rectTrans.rect.height * 0.5f * rectTrans.localScale.y;
            return screenPos;
        }

        return null;
    }
    
    public void OnDrag(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) return;
        
        //計(jì)算當(dāng)前物體距離畫布左下角位置
        Vector3? curScreenPos = CalculateWorldToScreenPos(transform.position);
        if (curScreenPos == null) return;
        //鼠標(biāo)位置偏移量
        Vector2 offset = eventData.position - (Vector2)curScreenPos.Value;
        if (offset != Vector2.zero)
        {
            transform.rotation = Quaternion.FromToRotation(Vector3.up, offset);
        }
    }

設(shè)置下箭頭錨點(diǎn)

效果如下:

手指拖拽旋轉(zhuǎn)

第二種是根據(jù)旋轉(zhuǎn)速度來(lái)旋轉(zhuǎn)UI 可以實(shí)現(xiàn)一些齒輪交互滾動(dòng)和車把方向盤交互滾動(dòng)

//旋轉(zhuǎn)速度
[SerializeField] private float m_RotateSpeed;
    
    public void OnDrag(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) return;

        //手指滑動(dòng)偏移量
        Vector2 mouseXY = eventData.delta;
        mouseXY *= m_RotateSpeed;

        //計(jì)算當(dāng)前物體距離畫布左下角位置
        Vector3? curScreenPos = CalculateWorldToScreenPos(transform.position);
        if (curScreenPos == null) return;
        //手指位置偏移量
        Vector2 offset = eventData.position - (Vector2)curScreenPos.Value;

        float value;
        if (Mathf.Abs(mouseXY.x) > Mathf.Abs(mouseXY.y)) // 判斷水平滑動(dòng)還是垂直滑動(dòng)
        {
            //手指往水平滑動(dòng)   下面旋轉(zhuǎn)跟隨偏移參數(shù)  上面與偏移參數(shù)相反
            value = mouseXY.x * Mathf.Sign(-offset.y);
        }
        else
        {
            //手指垂直滑動(dòng)    右邊跟隨偏移參數(shù)    左邊與偏移參數(shù)相反
            value = mouseXY.y * Mathf.Sign(offset.x);
        }

        transform.Rotate(Vector3.forward, value, Space.Self);

    }

效果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實(shí)現(xiàn)屏幕拷貝的方法

    C#實(shí)現(xiàn)屏幕拷貝的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)屏幕拷貝的方法,實(shí)例分析了兩種常用的屏幕拷貝實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • C#中的事件介紹

    C#中的事件介紹

    這篇文章主要介紹了C#中的事件介紹,本文對(duì)C#事件的語(yǔ)法、定義方法、調(diào)用方法等做了講解,需要的朋友可以參考下
    2015-01-01
  • C#中is與As運(yùn)算符號(hào)的使用詳解

    C#中is與As運(yùn)算符號(hào)的使用詳解

    本篇文章是對(duì)C#中is與As運(yùn)算符號(hào)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Unity之Luaframework框架lua調(diào)用C#方法

    Unity之Luaframework框架lua調(diào)用C#方法

    這篇文章主要介紹了Unity之Luaframework框架lua調(diào)用C#方法,在這里需要寫一個(gè)C#腳本,腳本里寫方法需要在lua中調(diào)用,具體實(shí)例代碼參考下本文吧
    2021-09-09
  • C#實(shí)現(xiàn)根據(jù)指定容器和控件名字獲得控件的方法

    C#實(shí)現(xiàn)根據(jù)指定容器和控件名字獲得控件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)根據(jù)指定容器和控件名字獲得控件的方法,其中包括了遍歷與遞歸的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • C#導(dǎo)入導(dǎo)出EXCEL文件的代碼實(shí)例

    C#導(dǎo)入導(dǎo)出EXCEL文件的代碼實(shí)例

    這篇文章主要介紹了C#導(dǎo)入導(dǎo)出EXCEL文件代碼實(shí)例,代碼的流程和方法都很詳細(xì),需要的朋友可以參考下
    2014-04-04
  • 基于Unity3D實(shí)現(xiàn)仿真時(shí)鐘詳解

    基于Unity3D實(shí)現(xiàn)仿真時(shí)鐘詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Unity3D模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單是時(shí)鐘效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • C#使用for循環(huán)移除HTML標(biāo)記

    C#使用for循環(huán)移除HTML標(biāo)記

    大家在項(xiàng)目開(kāi)發(fā)階段移除文字中的html標(biāo)記最常用的方法就是使用正則表達(dá)式,但是正則表達(dá)式不能處理所有的html文檔,所以采用迭代方式會(huì)更好,下面小編給大家解答下
    2016-08-08
  • C#實(shí)現(xiàn)定義一套中間SQL可以跨庫(kù)執(zhí)行的SQL語(yǔ)句(案例詳解)

    C#實(shí)現(xiàn)定義一套中間SQL可以跨庫(kù)執(zhí)行的SQL語(yǔ)句(案例詳解)

    這篇文章主要介紹了C#實(shí)現(xiàn)定義一套中間SQL可以跨庫(kù)執(zhí)行的SQL語(yǔ)句,主要包括hisql查詢樣例、group by查詢、鏈?zhǔn)讲樵兗癶isql語(yǔ)句和鏈?zhǔn)讲樵兓煊玫膕ql語(yǔ)句,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例

    C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的SN快速輸入工具,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)序列號(hào)快速輸入的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11

最新評(píng)論