iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
自我挑戰組

Unity操作環境新手之旅系列 第 14

Day14:射線RayCast

  • 分享至 

  • xImage
  •  

今天簡單介紹一下Unity裡的RayCast:
Raycasting(射線投射)在 Unity 中是一種通過從特定點向某個方向發射射線(看不見的線)來檢測遊戲世界中的物體的方法。這對於檢測障礙物、判斷玩家是否接地或與 3D 環境中的物體交互很實用。

下面是一些 Raycasting 的概念:

射線(Ray):射線是一條從起始點向特定方向發射的看不見的線。可以將其想像成一束激光或直線,沿著指定方向前進。

RaycastHit:這個結構體存儲了射線擊中物體的相關信息,例如撞擊點、撞到的物體以及其他屬性。通常使用它來獲取碰撞的詳細信息。

https://ithelp.ithome.com.tw/upload/images/20240928/20169477YqIN1mgfnI.png
Raycast 方法:Physics.Raycast() 方法用於發射射線。它需要以下參數:

起始點(Origin):射線的起始點(通常是某個物體的位置)。
方向(Direction):射線發射的方向(通常是 transform.forward)。
RaycastHit(out):一個 RaycastHit 變量的引用,用來存儲射線命中的信息。
最大距離(Max Distance):射線應該行進的最大距離,超過此距離則停止。
LayerMask(可選):用於過濾射線可以碰撞的物體(有助於優化射線檢測)。
使用範例:

障礙物檢測:從角色發射射線來檢測前方是否有牆壁或敵人。
接地檢測:向下發射射線來檢查玩家是否接觸地面。
物體互動:使用射線來檢測世界中的可點擊物體,比如門或道具。

下面是一些例子:
https://ithelp.ithome.com.tw/upload/images/20240928/20169477SryWUg23qU.png
這段程式碼的主要功能是從當前物體的位置(transform.position)向物體的前方(transform.forward)發射一條射線。
Physics.Raycast() 方法會檢測這條射線在指定的最大距離(maxDist)內是否與某個物體相交,並將命中的物體資訊儲存在 RaycastHit 結構體變數(hit)中。
如果射線命中了一個物體,則會輸出該物體的名稱(hit.transform.name)。
這個程式碼片段適合用於檢測前方是否有障礙物,並將碰撞的物體資訊進行記錄或處理。

https://ithelp.ithome.com.tw/upload/images/20240928/20169477h5lrimaS0I.png
這個程式碼從玩家物體的當前位置向下(Vector3.down)發射射線,檢查是否與地面發生碰撞。
Physics.Raycast() 方法檢測是否有物體在射線的最大距離(2 個單位)內命中。
若射線命中並且距離小於或等於 1 個單位,則設置變數 isGrounded 為 true,表示玩家站在地面上。
這樣的檢測通常用於控制玩家的跳躍、行走等行為。


上一篇
Day13:碰撞
下一篇
Day15:Global和Local空間
系列文
Unity操作環境新手之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言