拖拽實現+搖桿實現

拖拽實現

拖拽事件實現:

? ? ? ? 半透明漸變貼圖在ios設備下,使用壓縮會造成圖片質量損失,所以可以將半透明漸變UI切片單獨制作真彩色圖集

拖拽事件組

? ? ? ? IBeginDragHandler:檢測到射線后,當拖拽動作開始時執行一次回調函數

? ? ? ? IDragHandler:拖拽開始后,有拖拽位置變化時,執行回調函數(每個移動)

? ? ? ? IEndDragHandler:拖拽進行中時,當鼠標或手抬起時,執行一次回調函數

public class TestDrag : MonoBehaviour,
IBeginDragHandler,IEndDragHandler,
IDragHandler
{public void OnBeginDrag(PointerEventData eventData){Debug.Log("開始拖拽");}void IEndDragHandler.OnEndDrag(PointerEventData eventData){Debug.Log("結束拖拽");}//PointerEventData是Unity從設備硬件接收到的數據和事件相關的一些數據//拖拽中會連續回調,將被拖拽物體的執行代碼放在OnDrag中才能實現物體的連續移動public void OnDrag(PointerEventData eventData){//拖拽移動的實現//手指觸摸屏幕,產生坐標點//移動實現,需要將屏幕的坐標點,轉換為被移動物體的本地坐標系下的位置點//使用被移動物體的transform,通過本地坐標系的點實現位置改變//相對的父物體是誰?//屏幕的坐標點//攝像機是誰?Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.parent as RectTransform,//參考坐標系對象的RectTransformeventData.position,//事件發生時屏幕的觸摸點eventData.pressEventCamera,//觸發事件的相機out localPos//以第一個參數作為參考坐標系的事件觸發位置);transform.localPosition=localPos;Debug.Log("拖拽中......");}
}

如何獲取物體的位置:

? ? ? ? 位置:相對量,需要有參照物體

? ? ? ? 屏幕坐標:手點擊屏幕時生成

? ? ? ? DragArea本地坐標:控制搖桿(DragBar)的位置?

如何通過屏幕坐標系下的點,轉換到DragArea本地坐標系下的點

//通過屏幕事件坐標,獲得本地事件坐標
RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform,//參考坐標系對象的RectTransformeventData.position,//事件發生時屏幕的觸摸點eventData.pressEventCamera,//觸發事件的相機out localPos//以第一個參數作為參考坐標系的事件觸發位置
);
搖桿實現

相關代碼如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;//需要在UI上設定一個點擊區域,點擊后,搖桿出現,抬起后搖桿消失
//根據點擊位置移動整個搖桿
//拖拽時將桿的位置進行移動
//限制搖桿距離
public class DragController : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler
{public GameObject dragBar;public Transform bar;//可移動區域的最遠距離public float R;// Start is called before the first frame updatevoid Start(){dragBar.SetActive(false);}public void OnPointerDown(PointerEventData eventData){dragBar.SetActive(true);Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform,//參考坐標系對象的RectTransformeventData.position,//事件發生時屏幕的觸摸點eventData.pressEventCamera,//觸發事件的相機out localPos//以第一個參數作為參考坐標系的事件觸發位置);dragBar.transform.localPosition = localPos;}public void OnPointerUp(PointerEventData eventData){dragBar.SetActive(false);bar.localPosition = Vector3.zero;}public void OnDrag(PointerEventData eventData){Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(dragBar.transform as RectTransform,//參考坐標系對象的RectTransformeventData.position,//事件發生時屏幕的觸摸點eventData.pressEventCamera,//觸發事件的相機out localPos//以第一個參數作為參考坐標系的事件觸發位置);//判斷當前向量的長度是否大于Rif (localPos.magnitude > R){localPos = localPos.normalized * R;}bar.transform.localPosition = localPos;}
}

Unity中的具體操作如圖:

運行時如圖:

?

該系列專欄為網課課程筆記,僅用于學習參考。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73778.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xLua_001 Lua 文件加載

xLua下載 1、HelloWrold 代碼 using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; // 引入XLua命名空間 public class Helloworld01 : MonoBehaviour {//聲明LuaEnv對象 private LuaEnv luaenv;void Start(){//實例化LuaEnv對象…

每天看一篇漏洞報告

前言: 內容來源于烏云漏洞 今日思考xss漏洞, 今天看到一篇文章,里面詳細說了xss的繞過技巧,雖然時間久了,沒有去嘗試,待會有時間去測試一下 以下是整理后的文章,原文在下面 文章鏈接&#…

【sql靶場】第18-22關-htpp頭部注入保姆級教程

目錄 【sql靶場】第18-22關-htpp頭部注入保姆級教程 1.回顧知識 1.http頭部 2.報錯注入 2.第十八關 1.嘗試 2.爆出數據庫名 3.爆出表名 4.爆出字段 5.爆出賬號密碼 3.第十九關 4.第二十關 5.第二十一關 6.第二十二關 【sql靶場】第18-22關-htpp頭部注入保姆級教程…

Python----計算機視覺處理(Opencv:形態學變換)

一、形態學變化 形態學變換(Morphological Transformations)是一種基于形狀的圖像處理技術,主要處理的對象為二值化圖像。 形態學變換有兩個輸入和一個輸出:輸入為原始圖像和核(即結構化元素),輸…

對于memset(b, 1, sizeof b)賦值為16843009情況

memset(b, 1, sizeof b); 的行為看起來可能不符合預期,這是因為 memset 的工作方式和數據類型之間的差異導致的。下面詳細解釋這個問題。 1. memset 的作用 memset 是 C/C 中的一個標準庫函數,用于將一段內存區域的值設置為指定的字節值。它的函數原型如…

【最新版】智慧小區物業管理小程序源碼+uniapp全開源

一.系統介紹 智慧小區物業管理小程序,包含小區物業繳費、房產管理、在線報修、業主活動報名、在線商城等功能。為物業量身打造的智慧小區運營管理系統,貼合物業工作場景,輕松提高物業費用收繳率,更有功能模塊個性化組合,助力物業節約成本高效運營。 二.搭建環境 系統環…

C++模板進階

目錄 非類型模板參數 類模板的特化 分類 函數模板的特化 模板分離編譯 問題 解決方法 1)不對模板定義進行分離或對模板進行特例化; 2)將聲明和定義放在同一個文件 總結 關于C模板的使用在《C類和對象》中有介紹,本篇博客…

Ubuntu togo系統讀寫性能與原生系統測試

我前面把一個Ubuntu環境拷貝到了一個10Gbps的硬盤盒制作了一個Ubuntu togo的系統,帖子在這里,這篇文章主要用于測試使用Ubuntu togo的系統和原生系統的性能差異。 以下是測試Ubuntu togo系統與原系統性能差異的具體方案,結合移動硬盤特性及參…

【css酷炫效果】實現魚群游動動態效果

【css酷炫效果】實現小魚游動動態效果 緣創作背景css代碼創建div容器引入jquery引入魚群js完整代碼效果圖成品資源下載鏈接:點擊下載 緣 在開發系統功能的時候,無意間看到了小魚游動特效,感覺很有意思,就在網上找了相關教程,分享給大家。 創作背景 剛看到csdn出活動了…

停車場停車位數據集,標注停車位上是否有車,平均正確識別率99.5%,支持yolov5-11, coco json,darknet,xml格式標注

停車場停車位數據集,標注停車位上是否有車,平均正確識別率98.0%,支持yolov5-11, coco json,darknet,xml格式標注 數據集-識別停車場所有車輛的數據集 數據集分割 一共184張圖片 訓練組 89&am…

結合基于標簽置信度的特征選擇方法用于部分多標簽學習-簡介版

假設 部分多標簽學習(PML)假設:假設樣本的標簽集合中存在偽正標簽,即某些標簽可能是錯誤的。目標是從候選標簽集中識別出真實標簽。特征與標簽的關系假設:假設不同的標簽對應的特征子空間可能是不同的,而不…

Lora微LLAMA模型實戰

引言 本文介紹如何復現Alpaca-lora,即基于alpaca數據集用lora方法微調Llama模型。 環境準備 實驗環境用的是lanyun,新用戶點擊注冊可以送算力。 下載huggingface上的模型是一個令人頭疼的問題,但在lanyun上可以通過在終端運行source /etc…

Maven常見問題匯總

Maven刷新,本地倉庫無法更新 現象 This failure was cached in the local repository and resolution is not reattempted until the update interval of aliyunmaven has elapsed or updates are forced原因 因為上一次嘗試下載,發現對應的倉庫沒有這個maven配置…

什么是站群服務器?站群服務器應該怎么選?

站群服務器是專門用于托管和管理多個網站的服務器。通常用于SEO優化、內容分發、廣告推廣等場景,用戶可以通過一個服務器管理多個站點,提升效率并降低成本。選擇站群服務器時,需根據業務需求、性能要求、IP資源等因素進行綜合考慮。 什么是站…

分享一個項目中遇到的一個算法題

需求背景: 需求是用戶要創建一個任務計劃在未來執行,要求在創建任務計劃的時候判斷選擇的時間是否符合要求,否則不允許創建,創建的任務類型有兩種,一種是單次,任務只執行一次;另一種是周期&…

【LInux進程六】命令行參數和環境變量

【LInux進程六】命令行參數和環境變量 1.main函數的兩個參數2.利用main函數實現一個簡單的計算器3.環境變量之一:PATH4.修改PATH5.在命令行解釋器bash中查看所有環境變量6.用自己寫的程序查看環境變量7.main函數的第三個參數8.本地的環境變量和環境變量9.環境變量具…

時間軸版本-2.0

文章簡述 這是本人自己封裝的時間軸2.0版本的代碼,用到了TypeScriptJavaScript 這篇文章只有代碼和具體的使用方式,如果想看具體的講解可以參考本人寫的時間軸1.0版本的,在1.0版本中可能計算時間線的邏輯略有不同,但是大致的計算…

大語言模型的壓縮技術

盡管人們對越來越大的語言模型一直很感興趣,但MistralAI 向我們表明,規模只是相對而言的,而對邊緣計算日益增長的興趣促使我們使用小型語言獲得不錯的結果。壓縮技術提供了一種替代方法。在本文中,我將解釋這些技術,并…

大華HTTP協議在智聯視頻超融合平臺中的接入方法

一. 大華HTTP協議介紹 大華HTTP協議是大華股份(Dahua Technology)為其安防監控設備開發的一套基于HTTP/HTTPS的通信協議,主要用于設備與客戶端(如PC、手機、服務器)之間的數據交互。該協議支持設備管理、視頻流獲取、…

Linux內核實時機制28 - RT調度器11 - RT 組調度

Linux內核實時機制28 - RT調度器11 - RT 組調度 相關數據結構 內核中通過static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)函數來判斷實時任務運行時間是否超出帶寬限制,判斷這個運行隊列rt_rq的運行時間是否超過了額定的運行時間。而“運行時間”和“額定時間”都…