【Unity】 UGUI的PhysicsRaycaster (物理射線檢測)組件的介紹及使用

1. 什么是PhysicsRaycaster組件?

PhysicsRaycaster是Unity UGUI中的一個組件,用于在UI元素上進行物理射線檢測。它可以檢測鼠標或觸摸事件是否發生在UI元素上,并將事件傳遞給相應的UI元素。

2. PhysicsRaycaster的工作原理

PhysicsRaycaster通過發射一條射線來檢測UI元素。當射線與UI元素相交時,PhysicsRaycaster會將事件傳遞給相應的UI元素。

3. PhysicsRaycaster的常用屬性

  • Event Mask:指定哪些層的UI元素可以接收事件。
  • Max Raycast Distance:指定射線的最大檢測距離。

4. PhysicsRaycaster的常用函數

  • Raycast:發射一條射線并返回與之相交的UI元素。

5. 完整例子代碼

例子1:點擊按鈕改變顏色

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class ButtonColorChanger : MonoBehaviour, IPointerClickHandler
{private Image image;private void Start(){image = GetComponent<Image>();}public void OnPointerClick(PointerEventData eventData){image.color = Random.ColorHSV();}
}

操作步驟

  1. 創建一個Canvas對象,并在Canvas下創建一個Button對象。
  2. 將Button對象的Image組件的Color屬性設置為任意顏色。
  3. 將Button對象的PhysicsRaycaster組件的Event Mask屬性設置為默認值。
  4. 將Button對象的ButtonColorChanger腳本掛載到Button對象上。
  5. 運行游戲,點擊Button對象,顏色會隨機改變。

注意事項

  • 需要在Canvas對象上添加一個Graphics Raycaster組件,以便PhysicsRaycaster能夠工作。

例子2:拖拽物體?

using UnityEngine;
using UnityEngine.EventSystems;public class ObjectDragger : MonoBehaviour, IPointerDownHandler, IDragHandler
{private RectTransform rectTransform;private void Start(){rectTransform = GetComponent<RectTransform>();}public void OnPointerDown(PointerEventData eventData){rectTransform.SetAsLastSibling();}public void OnDrag(PointerEventData eventData){rectTransform.anchoredPosition += eventData.delta;}
}

?

操作步驟

  1. 創建一個Canvas對象,并在Canvas下創建一個Image對象。
  2. 將Image對象的PhysicsRaycaster組件的Event Mask屬性設置為默認值。
  3. 將Image對象的ObjectDragger腳本掛載到Image對象上。
  4. 運行游戲,點擊Image對象并拖動,Image對象會跟隨鼠標或觸摸移動。

注意事項

  • 需要在Canvas對象上添加一個Graphics Raycaster組件,以便PhysicsRaycaster能夠工作。

例子3:點擊按鈕播放音效?

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class ButtonSoundPlayer : MonoBehaviour, IPointerClickHandler
{public AudioClip soundClip;private Button button;private AudioSource audioSource;private void Start(){button = GetComponent<Button>();audioSource = GetComponent<AudioSource>();audioSource.clip = soundClip;}public void OnPointerClick(PointerEventData eventData){audioSource.Play();}
}

?

操作步驟

  1. 創建一個Canvas對象,并在Canvas下創建一個Button對象。
  2. 將Button對象的PhysicsRaycaster組件的Event Mask屬性設置為默認值。
  3. 在場景中添加一個AudioSource對象,并將音效文件拖拽到ButtonSoundPlayer腳本的soundClip屬性上。
  4. 將Button對象的ButtonSoundPlayer腳本掛載到Button對象上。
  5. 運行游戲,點擊Button對象,音效會播放。

注意事項

  • 需要在Canvas對象上添加一個Graphics Raycaster組件,以便PhysicsRaycaster能夠工作。?

順便介紹一下幾個其他的組件

1.Graphic Raycaster?

?主要用于UI上的射線檢測,掛有這個組件的物體,必須要掛上Canvas這個組件(當掛上Graphic Raycaster時Canvas也會自動掛上)。

Ignore Reversed Graphics:是否忽略反方向的圖形,如果為true,則表示圖形正面展示時,會接收到射線檢測;反面展示時,不會接收到射線檢測;否則,正反面展示都會接收到射線檢測

Blocking Objects:屏蔽指定類型的(物理)對象,使它們不參與射線檢測。渲染模式不為ScreenSpaceOverlay時起作用。可選值為:
None:不屏蔽任何物理對象
Two D:屏蔽2D物理對象(即具有2D碰撞體的對象)
Three D:屏蔽3D物理對象(即具有3D碰撞體的對象)

All:屏蔽所有物體對象

Blocking Mask:使屏蔽對象中的指定層不參與射線檢測。渲染模式不為ScreenSpaceOverlay時,且Blocking Objects不為None時起作用。
例如,Blocking Objects為2D,Blocking Mask為UI,指2D物理對象中是UI層的東西都不會接收射線檢測,而2D物理對象中的其他層還是能接收射線檢測

?3.Selectable

Selectable的意思是可選擇的,它是UGUI中很多交互控件(Button/ Slider / InputField / Toggle / Scrollbar /)的基類,其中的Interactable,當值為false時,UI控件會進入disable狀態(顏色會變為Disabled Color的那個顏色),但是UI控件仍然能接收到射線檢測!

CanvasGroup

?用來批量地管理該控件以及該控件下的UI控件。Interactable的意思上面已經說到,而Blocks Raycasts,若為false,則UI控件不能接收射線檢測

射線穿透:

如上圖,button和image都實現了點擊接口,如果想點擊兩者的重疊部分,button的事件沒有觸發,而image的事件觸發了,方法就是:

給button掛上Canvas Group組件,然后不勾選Blocks Raycasts。

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

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

相關文章

【Proteus仿真】【51單片機】智能垃圾桶設計

文章目錄 一、功能簡介二、軟件設計三、實驗現象聯系作者 一、功能簡介 本項目使用Proteus8仿真51單片機控制器&#xff0c;使用報警模塊、LCD1602液晶模塊、按鍵模塊、人體紅外傳感器、HCSR04超聲波、有害氣體傳感器、SG90舵機等。 主要功能&#xff1a; 系統運行后&#xf…

基于GPRS的汽車碰撞自動報警系統(論文+源碼)

1. 系統設計 本次基于GPRS的汽車碰撞自動報警系統的設計中&#xff0c;其主要的目標功能如下&#xff1a;1、實時檢測當前的GPS精度和緯度坐標&#xff1b;2.當發生碰撞后系統自動將當前的信息通過GPRS數據發送到遠端數據進行報警&#xff1b;3、系統在碰撞后一方面進行本地報警…

聽GPT 講Rust源代碼--src/tools(2)

題圖來自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一個 Rust 語言的語法分析器和語義分析器&#xff0c;用于提供代碼補全、導航、重構等開發工具。而 rust-analyzer 的代碼實現存儲在 rust/src/tools/rust-analyzer 這個文件夾中…

010 OpenCV中的4種平滑濾波

目錄 一、環境 二、平滑濾波 2.1、均值濾波 2.2、高斯濾波 2.3、中值濾波 2.4、雙邊濾波 三、完整代碼 一、環境 本文使用環境為&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑濾波 2.1、均值濾波 在OpenCV庫中&#xff0c;blur函數是一種簡…

遞歸剪枝題

期中考終于考完了&#xff0c;整道題獎勵下自己 我一北大同學問我的&#xff0c;說他遞歸超時了&#xff0c;叫我想一個辦法 后面他說他加了個剪枝就過了&#xff0c;然后我自己嘗試了一個方法&#xff1a; 就是先把城市按1到n排列&#xff0c;然后考慮互換&#xff0c;如果互…

考過了PMP,面試的時候應該怎么辦?

近期喜番在后臺收到了很多同學們的私信&#xff0c;表示自己已經過了8月份的PMP考試&#xff0c;開始著手往項目管理崗位轉型&#xff0c;但是對于項目管理崗位的面試卻一籌莫展。放輕松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番給大家總結了一些項目經理在面試的時…

SpringCloud 微服務全棧體系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索結果處理 搜索的結果可以按照用戶指定的方式去處理或展示。 1. 排序 elasticsearch 默認是根據相關度算分&#xff08;_score&#xff09;來排序&#xff0c;但是也支持自定義方式對搜索結果排序。可以排序字段類型有&#…

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 無法加載,docs無法加載,redocs無法使用

使用fastapi的時候&#xff0c;swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有時候無法加載&#xff08;國內環境原因或者是局域網屏蔽&#xff09;&#xff0c;此時就需要自己用魔法下載好對應文件&#xff0c;然后替換到fastapi里面去。 fastapi里面依靠這…

計算機視覺(CV)技術的優勢:

計算機視覺&#xff08;CV&#xff09;技術的優勢&#xff1a; 自動化&#xff1a;計算機視覺技術可以自動化處理大量的視覺數據。 精度和速度&#xff1a;計算機視覺技術可以在很短的時間內對大量的圖像數據進行處理&#xff0c;并且可以達到非常高的精度。 可靠性&#xff…

【微軟技術棧】使用(TAP)基于任務的異步模式

本文內容 使用 Await 掛起執行取消異步操作監視進度使用內置的基于任務的連結符構建基于任務的連結符構建基于任務的數據結構 c#使用基于任務的異步模式 (TAP) 處理異步操作時&#xff0c;可以使用回叫實現等待&#xff0c;而不會阻塞。 對于任務&#xff0c;這可通過 Task.C…

java學習part07數組工具類

1比較內容 2輸出信息 3值填充 4快速排序 5二分查找 負數沒找到&#xff0c;其他表示下標

ES6 — ES14 新特性

一、ES6 新特性&#xff08;2015&#xff09; 1. let和const 在ES6中&#xff0c;新增了let和const關鍵字&#xff0c;其中 let 主要用來聲明變量&#xff0c;而 const 通常用來聲明常量。let、const相對于var關鍵字有以下特點&#xff1a; 特性varletconst變量提升??全局…

【漏洞復現】金蝶云星空管理中心 ScpSupRegHandler接口存在任意文件上傳漏洞 附POC

漏洞描述 金蝶云星空是一款云端企業資源管理(ERP)軟件,為企業提供財務管理、供應鏈管理以及業務流程管理等一體化解決方案。金蝶云星空聚焦多組織,多利潤中心的大中型企業,以 “開放、標準、社交”三大特性為數字經濟時代的企業提供開放的 ERP 云平臺。服務涵蓋:財務、供…

什么是切片

切片&#xff0c;是一個比較生疏的名詞&#xff0c;這是現代計算機編程語言或者說Python里的一個概念&#xff0c;大致意思是從一個集合里切出一塊來&#xff0c;就像切一塊豆腐&#xff0c;一刀下去切出兩塊豆腐 先看一個函數range、返回值是列表&#xff0c;內容和傳入range…

【MySQL】mysql中不推薦使用uuid或者雪花id作為主鍵的原因以及差異化對比

文章目錄 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?優缺點對比UUID:優點1.全球唯一性2.無需數據庫支持 缺點1.存儲空間大2.索引效率低3.查詢效率低 雪花ID&#xff1a;優點1.分布式環境下唯一性 缺點1.依賴于機器時鐘2.存儲空間較大3.查詢效率低 MYSQL自增:優點1.簡單…

qml PathView使用介紹

PathView 是 QML 的一個強大的元素,它能夠在任意路徑上布局和滾動項目。這使得創建復雜的滾動視圖和項目動畫變得相對更簡單。 以下是 PathView 的一些主要特性: 路徑定義: PathView 根據 Path 元素定義的路徑布局項目。路徑可以是簡單的直線,復雜的曲線,或者包含多個不同…

IP 代理的基礎知識有哪些?

本文將介紹流冠IP代理的基礎知識&#xff0c;幫助您了解IP代理的概念、類型、作用、設置方法和注意事項。 一、IP代理的概念 IP代理是一種網絡代理服務&#xff0c;它通過代理服務器幫助用戶訪問互聯網&#xff0c;并將用戶的請求轉發到目標網站&#xff0c;同時將目標網站的響…

手寫工作流設計模式,針對常見的工作流步驟流轉,減少過多的if/else,提升編程思維

需求 這一年下來&#xff0c;寫兩次工作流流轉&#xff0c;總結下經驗。 第一次寫的時候&#xff0c;只找到用模版設計模式包裹一下&#xff0c;每個方法都做隔離&#xff0c;但是在具體分支實現的時候&#xff0c;if/else 滿屏分&#xff0c;而且因為要針對不同情況&#xff…

微信小程序實現類似Vue中的computed、watch功能

微信小程序實現類似Vue中的computed、watch功能 構建npm使用 構建npm 創建包管理器 進入小程序后&#xff0c;打開終端&#xff0c;點擊頂部“視圖” - “終端” 新建終端 使用 npm init -y初始化包管理器&#xff0c;生成一個package.json文件 安裝 npm 包 npm install --…

Java Web 實戰 21 - 用 Servlet 實現一個Hello World

用 Servlet 來寫一個 Hello World~ 一 . 基本部署方式1.1 創建 Servlet 項目1.2 引入依賴1.3 創建目錄1.4 編寫代碼繼承 HttpServlet重寫 doGet 方法刪除 super 方法加上 WebServlet 注解寫業務邏輯 1.5 打包1.6 部署1.7 驗證1.8 小結 二 . 更方便的部署方式2.1 Smart Tomcat 的…