亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Unity搖桿制作的方法

 更新時(shí)間:2021年08月11日 10:47:55   作者:_不動(dòng)明王  
這篇文章主要為大家詳細(xì)介紹了Unity搖桿制作的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity搖桿制作方法的具體代碼,供大家參考,具體內(nèi)容如下

一.UI制作

1.首先創(chuàng)建一個(gè)空物體,命名為搖桿,錨點(diǎn)調(diào)至左下角

2.創(chuàng)建一個(gè)image作為搖桿廚盆的有效地方,并命名為tough_place

3.創(chuàng)建一個(gè)image放入搖桿的背景圖片,并命名為bg。

4.創(chuàng)建一個(gè)image放入搖桿的控制點(diǎn),并命名為point。

5.把tough_place的顏色設(shè)置為透明

二.代碼編寫

創(chuàng)建腳本命名為PEListener,并引入相關(guān)接口,并進(jìn)行封裝。

using System;
using UnityEngine;
using UnityEngine.EventSystems;

public class PEListener : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
    public Action<PointerEventData> onClickDown;//鼠標(biāo)按下時(shí)觸發(fā)的事件
    public Action<PointerEventData> onClickUp;//鼠標(biāo)抬起時(shí)觸發(fā)的事件
    public Action<PointerEventData> onClickDrag;//鼠標(biāo)按下時(shí)觸發(fā)的事件
    public void OnPointerDown(PointerEventData eventData)
    {
        if (onClickDown != null)
        {
            onClickDown(eventData);
        }
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        if (onClickUp != null)
        {
            onClickUp(eventData);
        }
    }
   
    public void OnDrag(PointerEventData eventData)
    {
        if (onClickDrag!=null)
        {
            onClickDrag(eventData);
        }
    }
  
}

創(chuàng)建腳本命名為Test,進(jìn)行相關(guān)的邏輯操作。

(1)定義相關(guān)數(shù)據(jù)并傳入

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Test : MonoBehaviour {

    //輪盤UI
    public Image imageTough;//輪盤觸摸區(qū)域
    public Image imgDir;//輪盤背景
    public Image imaPoint;//輪盤操作點(diǎn)


    
    //輪盤相關(guān)數(shù)據(jù)
    Vector2 startPos;//輪盤按下的坐標(biāo)
    Vector2 defulPos;//輪盤按下的坐標(biāo)
    float poinDis=90;// 輪盤中心和邊緣的最大距離(數(shù)據(jù)自己測(cè)試)


   private void Start()
    {
        defulPos = imageTough.transform.position;

        //由于我們的Canvas選擇的是Scale with Screen Size,且Match為1,也就是UI縮放受高度影響到大,具體數(shù)據(jù)見下圖
        //poinDis實(shí)際大小=poinDis *縮放
        poinDis = Screen.height * 1.0f / 1334 * poinDis;
    }
}

(2)進(jìn)行相關(guān)邏輯的書寫

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Test : MonoBehaviour {

    //輪盤UI
    public Image imageTough;//輪盤觸摸區(qū)域
    public Image imgDir;//輪盤背景
    public Image imaPoint;//輪盤操作點(diǎn)


    
    //輪盤相關(guān)數(shù)據(jù)
    Vector2 startPos;//輪盤按下的坐標(biāo)
    Vector2 defulPos;//輪盤按下的坐標(biāo)
    float poinDis=90;// 輪盤中心和邊緣的最大距離(數(shù)據(jù)自己測(cè)試)


    private void Start()
    {
        defulPos = imageTough.transform.position;

        //由于我們的Canvas選擇的是Scale with Screen Size,且Match為1,也就是UI縮放受高度影響到大,具體數(shù)據(jù)見下圖
        //poinDis實(shí)際大小=poinDis *縮放
        poinDis = Screen.height * 1.0f / 1334 * poinDis;


        RegisterTouchEvts();
    }


    public void RegisterTouchEvts()
    {
        PEListener lister = imageTough.gameObject.AddComponent<PEListener>();

        lister.onClickDown = (PointerEventData evt) =>
        {
            //鼠標(biāo)按下時(shí)設(shè)置輪盤背景位置
            startPos = evt.position;
            imgDir.transform.position = evt.position;

        };

        lister.onClickUp = (PointerEventData evt) =>
        {
            //鼠標(biāo)抬起時(shí)設(shè)置輪盤背景位置和輪盤操作點(diǎn)為默認(rèn)位置
            
            imgDir.transform.position = defulPos;
            imaPoint.transform.localPosition = Vector2.zero;

        };

        lister.onClickDrag = (PointerEventData evt) =>
        {

            //計(jì)算是否超過(guò)輪盤中心和邊緣的最大距離
            Vector2 dir = evt.position - startPos;
            float len = dir.magnitude;

            //超過(guò)了,限制為最大位置
            if (len > poinDis)
            {
                Vector2 clampDir = Vector2.ClampMagnitude(dir, poinDis);
                imaPoint.transform.position = startPos + clampDir;
            }
            else
            {
                imaPoint.transform.position = evt.position;
            }
        };
    }

}

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

相關(guān)文章

  • C#二進(jìn)制讀寫B(tài)inaryReader、BinaryWriter、BinaryFormatter

    C#二進(jìn)制讀寫B(tài)inaryReader、BinaryWriter、BinaryFormatter

    這篇文章介紹了C#二進(jìn)制讀寫B(tài)inaryReader、BinaryWriter、BinaryFormatter的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#有效防止同一賬號(hào)多次登錄(附三種方法)

    C#有效防止同一賬號(hào)多次登錄(附三種方法)

    這篇文章主要介紹了C#有效防止同一賬號(hào)多次登錄的方法,有效防止同一賬號(hào)多次登錄的方法很多,比如用數(shù)據(jù)庫(kù)來(lái)記錄用戶登錄情況、用Application來(lái)保存用戶登錄信息、用Cache來(lái)保存信息等,感興趣的小伙伴們可以參考一下
    2015-11-11
  • C#中Attribute特性的用法

    C#中Attribute特性的用法

    這篇文章介紹了C#中Attribute特性的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)字符串格式化的五種方式

    C#實(shí)現(xiàn)字符串格式化的五種方式

    C#字符串格式化是一種將數(shù)據(jù)插入到預(yù)定義文本模板中創(chuàng)建新字符串的過(guò)程,它允許開發(fā)者更方便地控制輸出內(nèi)容的布局和顯示樣式,本文給大家介紹了C#實(shí)現(xiàn)字符串格式化的五種方式,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正

    C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正

    這篇文章主要為大家詳細(xì)介紹了C#如何利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#調(diào)用Python腳本程序的兩種方法

    C#調(diào)用Python腳本程序的兩種方法

    本文主要介紹了C#調(diào)用Python腳本程序的兩種方法,包含介紹了通過(guò)C#IronPython開源庫(kù)和通過(guò)Process類來(lái)運(yùn)行python解釋器這兩種,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • c# 生成二維碼的示例

    c# 生成二維碼的示例

    這篇文章主要介紹了c# 生成二維碼的示例,幫助大家更好的理解和使用c#編程語(yǔ)言,感興趣的朋友可以了解下
    2020-11-11
  • C#用正則表達(dá)式Regex.Matches 方法檢查字符串中重復(fù)出現(xiàn)的詞

    C#用正則表達(dá)式Regex.Matches 方法檢查字符串中重復(fù)出現(xiàn)的詞

    使用正則表達(dá)式用Regex類的Matches方法,可以檢查字符串中重復(fù)出現(xiàn)的詞,Regex.Matches方法在輸入字符串中搜索正則表達(dá)式的所有匹配項(xiàng)并返回所有匹配,本文給大家分享C#正則表達(dá)式檢查重復(fù)出現(xiàn)的詞,感興趣的朋友一起看看吧
    2024-02-02
  • C#中ArrayList的使用方法

    C#中ArrayList的使用方法

    這篇文章主要介紹了
    2013-12-12
  • 快速了解c# 結(jié)構(gòu)體

    快速了解c# 結(jié)構(gòu)體

    這篇文章主要介紹了c# 結(jié)構(gòu)體的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論