Unity C# | Physics.Raycast

閱讀時間約 1 分鐘

前言

  這篇文章將會講述物理射線的運作原理,以及他們怎麼使用,在 Unity 中射線是非常重要的一個部分,無論是 Debug 或是物理射線,都需要理解並懂得運用。

Physics.Raycast

  官方的 API 可以去最後的參考資料參閱,接下來我會敘述物理射線大概會有哪些東西,以及它的注意事項。
  物理射線的資料型態是 bool ,回傳於射線打到目標的時候,因此射線只會回傳一次,不會貫穿目標取得所有目標,它使用 Fixed Update,所以要去注意並不是無時無刻檢查,而是每隔 0.2f 秒才做檢查。

Ray

  雷射是最重要的部分,它可以是先定義好,也可以在呼叫物理射線時再去做定義,定義一個雷射,會需要兩個向量,第一個是座標,第二個是方向。
vector3 origin = new vector3(this.tranform.position)
vector3 direction = new vector3(this.transform.forward);
Ray ray = new ray(origin,direction);

RaycastHit

  當我們製作的射線打到目標,會回傳 bool 值,同時會獲取目標的一些資料數值,譬如它是誰、打中哪裡、距離多遠等等資訊,詳情可以參考最後面的參考資料。
RaycastHit HitInfo;

LayerMask

  因為射線只能觸發一次,所以我們可能會希望射線會穿過某些目標,或者只命中某些目標,這個時候就會需要 LayarMask 來進行設定,這個的詳細內容會比較複雜一點,詳情可以參考最後面的參考資料。
LayerMask mask = LayerMask.GetMask("Player");
LayerMask mbsk = LayerMask.LayerToName(7);
LayerMask mcsk = LayerMask.NameToLayer("PlayersLayer");
LayerMask mdsk = 1 << 7 ;

MaxDistance

  這個很容易理解,就是射線會偵測的最大距離,就像子彈也有射程一樣,光線和雷射也是,通常我們不會去定義,而是直接設定多少,不過這邊依然提前設定好。
float MaxDistance = 100;

使用方法

  我在這邊從最簡單的使用方式,到比較複雜的使用方式,裡面的參數都是使用上面定義好的內容:

01. 回傳命中與否

  當我們只需要知道是否命中目標時,可以只有雷射與距離。
if(Phsics.RayCast(ray,MaxDistance))...

02. 取得目標資訊

  當我們命中目標後,需要對目標進行一些操作,就可以再補上 RaycastHit。
if(Phsics.Raycast(ray,hitInfo,MaxDistance))...

03. 限定命中指定 Layer 圖層

  當我們需要命中指定圖層時,就可以再補上 LayerMask。
if(Phsics.Raycast(ray,hitInfo,MaxDistance,mask))...

04. 取得 Collider 碰撞情形

  這個我沒用做,前面我也沒放定義,有需求可以去參考資料查詢。
if(Phsics.Raycast(ray,hitInfo,MaxDistance,mask,queryTriggerInteraction))...

後記

  其實之前就有考慮撰寫相關的文章,不過因為射線其實不好學,很多教學都只有使用方式,而且每一位的使用方式都不相同,官方 API 的教學也是太過詳細導致內容不太完整,但寫起來就會發現好像還好,看來我已經習慣使用它了。

參考資料

官方 API :Physics.Raycast

官方 API :RaycastHit

官方 API :LayerMask

為什麼會看到廣告
avatar-img
106會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述在Unity中跟角度有關的兩項變數有什麼樣的地位和運作方式,我們只要撰寫跟角色角度有關的程式碼,就絕對不會繞開這兩個變數。
這篇文章我將會講述關於 Update 相關的函式,並介紹他們在遊戲設計中所代表的地位,當未來需要使用時可以回來參考這篇文章。
這篇文章將會介紹官方設置好的偵測玩家輸入,在撰寫遊戲程式的時候肯定需要偵測玩家輸入,其實並不需要自行撰寫程式來監控玩家操作,而是直接調閱官方的資料庫即可。
這篇文章將會講述 Unity Shader 及簡單的模式設定。
本篇文章將會介紹Switch和Enum,Switch這是一個等同開關的陳述式,相較於頻繁的「if」和「else if」,是一個在眾多方案中切換的一個好用法;Enum是具名常數,可以輔助並提升程式設計的易讀性。
  本篇文章將會告訴你延時方法的呼叫方式,Invoke是一種讓函式(function)延時啟動的官方函式,通常用於延後幾秒鐘啟動或用InvokeRepeating定時啟動函式,遊戲中常用於怪物的定時召喚或延遲觸發機關等。
這篇文章將會講述在Unity中跟角度有關的兩項變數有什麼樣的地位和運作方式,我們只要撰寫跟角色角度有關的程式碼,就絕對不會繞開這兩個變數。
這篇文章我將會講述關於 Update 相關的函式,並介紹他們在遊戲設計中所代表的地位,當未來需要使用時可以回來參考這篇文章。
這篇文章將會介紹官方設置好的偵測玩家輸入,在撰寫遊戲程式的時候肯定需要偵測玩家輸入,其實並不需要自行撰寫程式來監控玩家操作,而是直接調閱官方的資料庫即可。
這篇文章將會講述 Unity Shader 及簡單的模式設定。
本篇文章將會介紹Switch和Enum,Switch這是一個等同開關的陳述式,相較於頻繁的「if」和「else if」,是一個在眾多方案中切換的一個好用法;Enum是具名常數,可以輔助並提升程式設計的易讀性。
  本篇文章將會告訴你延時方法的呼叫方式,Invoke是一種讓函式(function)延時啟動的官方函式,通常用於延後幾秒鐘啟動或用InvokeRepeating定時啟動函式,遊戲中常用於怪物的定時召喚或延遲觸發機關等。
你可能也想看
Google News 追蹤
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
是種射線是種光 穿透一億種表情如何變成一種 穿透時間如何切割成年輕、年老, 切割成24小時、8小時, 切割成上班、加班 而不是想像、發呆、作夢、覓食 一朵鮮花在沙漠的歷程 是種磁波是種光 看透星辰風格如何變成一個字 看透地表如何區隔成出國、回國, 區隔成家裏、公司, 區隔成
Thumbnail
本文是針對馬達繞線時,想要依本身的生產能力調整漆包線徑粗度時,會使用到的轉換計算進行介紹及說明。 實際量產時往往將多條細線並繞的馬達,改由單條粗線採用機台繞線,較為省時;但開發階段,並無設備協助,僅能採用人工繞線打樣時,則會調整為多條細線並聯的模式才能順利工作,這類不同情境下的線徑變化,三不五時就
這一章介紹向量(vector)這個在物理、工程等領域非常重要的數學工具,以及如何用它來模擬一些物理現象。
Thumbnail
Raycast 是一個提供命令統一與快捷鍵最佳化的工具,讓開發者可以快速地存取並使用各種工具,進而提升生產力。本文介紹 Raycast 的發展、功能簡介、系統要求與適用對象,以及初步上手和使用建議。
Thumbnail
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
咱知影反射定律,知影折射定律,毋過遮个攏無講入來的光有偌濟會反射,偌濟會折射。筆者佇遮會用「一寡」數學運算,予讀者知古早的物理學家已經算出來矣,而且佇生活當中嘛有應用的產品。
Thumbnail
題目敘述 題目會給定一個輸入陣列points,陣列元素都是一組pair, points[i] = [starti, endi],分別代表每顆氣球的左邊界,和右邊界。 假設弓箭射出去後,動能不會減弱,沿路上的氣球都會被射穿。 請問最少需要幾隻弓箭,才可以射穿所有氣球? 題目的原文敘述
Thumbnail
建立幾個變數如下,最上面兩個變數值為清單值 接下來分別設定球1位置到左上角落、設定球2位置到右上角落、設定球3位置到左下角落、設定球4位置到右下角落 當螢幕初始化的時候,設定玩家球的X、Y座標和大小,並將玩家球的初始顏色,設定成(變數_顏色清單)中.....
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
是種射線是種光 穿透一億種表情如何變成一種 穿透時間如何切割成年輕、年老, 切割成24小時、8小時, 切割成上班、加班 而不是想像、發呆、作夢、覓食 一朵鮮花在沙漠的歷程 是種磁波是種光 看透星辰風格如何變成一個字 看透地表如何區隔成出國、回國, 區隔成家裏、公司, 區隔成
Thumbnail
本文是針對馬達繞線時,想要依本身的生產能力調整漆包線徑粗度時,會使用到的轉換計算進行介紹及說明。 實際量產時往往將多條細線並繞的馬達,改由單條粗線採用機台繞線,較為省時;但開發階段,並無設備協助,僅能採用人工繞線打樣時,則會調整為多條細線並聯的模式才能順利工作,這類不同情境下的線徑變化,三不五時就
這一章介紹向量(vector)這個在物理、工程等領域非常重要的數學工具,以及如何用它來模擬一些物理現象。
Thumbnail
Raycast 是一個提供命令統一與快捷鍵最佳化的工具,讓開發者可以快速地存取並使用各種工具,進而提升生產力。本文介紹 Raycast 的發展、功能簡介、系統要求與適用對象,以及初步上手和使用建議。
Thumbnail
其他特殊材質調整 Particles Q:大家有沒有發現剛剛葉子是一面有顏色一面透明? A:Unity的渲染只有單面,超奇怪ㄉ啦,他軟體預設就是單面,要改成雙面也行,但會造成電腦負擔,所以只需在想要雙面渲染的物體上賦予即可,不用整個專案都給它。 單面渲染的情形 材質球著色器定義 Sh
咱知影反射定律,知影折射定律,毋過遮个攏無講入來的光有偌濟會反射,偌濟會折射。筆者佇遮會用「一寡」數學運算,予讀者知古早的物理學家已經算出來矣,而且佇生活當中嘛有應用的產品。
Thumbnail
題目敘述 題目會給定一個輸入陣列points,陣列元素都是一組pair, points[i] = [starti, endi],分別代表每顆氣球的左邊界,和右邊界。 假設弓箭射出去後,動能不會減弱,沿路上的氣球都會被射穿。 請問最少需要幾隻弓箭,才可以射穿所有氣球? 題目的原文敘述
Thumbnail
建立幾個變數如下,最上面兩個變數值為清單值 接下來分別設定球1位置到左上角落、設定球2位置到右上角落、設定球3位置到左下角落、設定球4位置到右下角落 當螢幕初始化的時候,設定玩家球的X、Y座標和大小,並將玩家球的初始顏色,設定成(變數_顏色清單)中.....