Re: [請益] LayerMask+raycast問題

看板GameDesign (遊戲設計)作者 (Foreman)時間9年前 (2016/10/25 13:15), 9年前編輯推噓1(100)
留言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
感謝大大,我會重新思考ray+input.mouse的問題
10/25 22:54, 1F
文章代碼(AID): #1O3kg2i6 (GameDesign)
文章代碼(AID): #1O3kg2i6 (GameDesign)