Re: [請益] LayerMask+raycast問題
看板GameDesign (遊戲設計)作者Foremanytz (Foreman)時間9年前 (2016/10/25 13:15)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
你這邊遭遇的問題, 恐怕會需要你重新審視對Unity各種變數型態的認知
建議你多使用線上文件. 看懂它, 才能駕馭它.
以下分幾個部分說明你的狀況
Vector3 是 (x,y,z) 三個 float 的數值, 但是它可以是純量(座標)或向量(速度/方向)
甚至也可能是一組旋轉角.
Input.MousePosition 雖然回傳的格式 Vector3,
但它實際上只使用到 (x, y), z 經常是零, 而 (x,y) 是滑鼠位置在畫面的像素座標
假設你鏡頭設定是 720x480 全螢幕畫面, 則 x 在視窗內範圍是 0~719, y 是 0~479
滑鼠在畫面中間的話這個回傳的Vector3會變成 (359,239,0)
可是這並不代表你場景中 x=359, y=239, z=0 處有任何東西, 它只是個回傳值
Ray 是在3D空間中的一道光, 你需要給它起點終點座標, 例如:
Ray ray = new Ray(transform.position, transform.forward);
因為 forward 是該物件local的 +z 方向一公尺長的向量, 例子這道光只會長一公尺
把 Input.MousePosition 當作3D空間作標用 或者誤認 Ray 的運作方式都會錯
方向錯或者座標錯的話自然都偵測不到要點選的物件
除了空間座標的認知外, layer mask 的判斷方式也需要再確認
你的 wallLayer 除了需要參考 Unity 的 layer 列表, 需要
1. 在layer表內新增,
2. 也需要把場景內所有希望被這麼偵測到的物件都設定到該 Layer
3. wallLayer 是你自訂的 layer id, 因此通常是列表上第#8個, 像這張圖
https://docs.unity3d.com/uploads/Main/Layer-CreateNewLayer.png

假設你的 raycast 只要偵測#8的 layer, 那麼 wallLayer 要設為 256 (即2^8)
另例: 只偵測 #4 Water 的 layermask 要設定成 16 (即2^4)
同時要偵測任何與 #1 和 #3 兩層的layer碰撞, mask 要設定成 2^1+2^3 = 2+8 = 10
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.15.46.114
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1477372546.A.B06.html
※ 編輯: Foremanytz (163.15.46.114), 10/25/2016 13:20:44
推
10/25 22:54, , 1F
10/25 22:54, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章