2017-01-31 111 views
3

我是Unity3D的新手。我有一個由多個對象組成的場景:Unity3D防止與鼠標事件的衝突

  1. 預製房間(地板網格平面,牆壁4網格平面)。每一個都有一個Mesh撞機

  2. 帆布與多個UI元素的

  3. 裏面我創建的表的預製室,由一個缸(對於工作臺底座)時,表頂部的立方體,四個立方體圍繞桌面邊緣創造牆壁,使其成爲一個脣,桌面上是一架飛機(這是桌子「感覺」,還有一個箱子對撞機和剛體)。這些都有碰撞機。這全部變成預製。

  4. 在桌面上我有一些預製立方體(骰子)。這些有一個剛體和對撞機。

我遇到的問題是鼠標事件不註冊骰子(他們有一個腳本附加)。在更新時,我有這樣的代碼:

if (Input.GetMouseButtonDown(0)) 
     { 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      RaycastHit hit; 
      if (Physics.Raycast(ray, out hit)) 
      { 
       Debug.Log("Name = " + hit.collider.name); 
       Debug.Log("Tag = " + hit.collider.tag); 
       Debug.Log("Hit Point = " + hit.point); 
       Debug.Log("Object position = " + hit.collider.gameObject.transform.position); 
       Debug.Log("--------------"); 
      } 
     } 

我可以看到,即使我點擊骰子,其他對象的方式獲得(即房間的牆壁,桌子牆壁,桌子頂部等)。

那麼,我該怎麼過來呢?除了UI元素之外,唯一需要鼠標事件的對象是骰子。有沒有辦法不註冊鼠標事件?哦,我正在用C#寫這篇文章,這是一個3D項目。

感謝

here you can see the result of clicking on the dice. It registers the TableBase. If I move the dice up, away from the table, where the back wall is behind the dice, then the back wall will be registered

+0

你可以截取什麼阻止什麼?這將有所幫助。 – Programmer

+0

是的,但我應該補充一點,那就是「阻止」骰子的onclick事件的所有項目都是真正處於後臺的事情。骰子坐在所有東西前面 – jason

+0

你確定你的'Raycast'正在按照預期投射嗎?你可能已經知道這個:https://docs.unity3d.com/ScriptReference/Debug.DrawRay.html - 對調試raycasts總是很方便。 – Zze

回答

1

放在不同的層上的骰子和使用layermask與光線投射。 這是documentation.