我有一個統一的 2D 專案,我想檢測玩家游戲物件上的左鍵單擊事件。
我將 Physics2DRaycaster 添加到 MainCamera (請參閱下面的第一個螢屏)
我在游戲物件中添加了兩個碰撞器(圓形碰撞器用于檢測碰撞,盒子碰撞器被觸發并用于通過IPointer進行點擊檢測)(參見下面的第二個螢屏)
我在游戲物件腳本中實作了介面:IPointerClickHandler、IPointerEnterHandler、IPointerDownHandler。(見下面的代碼)
我在場景中有 EventSystem 物件(見下面的第三和第四個螢屏)
我用一個簡單的專案檢查了這個組合是否有效
但仍然在我的專案中,根本沒有檢測到任何點擊事件。我不知道為什么。我認為光線投射本身不起作用,因為當我查看檢查器中的 EventSystem 日志時,我發現沒有檢測到播放器物件。
更新:我看到如果我關閉畫布,IPointer 就會作業。但是畫布元素僅放置在玩家游戲物件(選單按鈕)周圍,但游戲物件并未被畫布隱藏
更新 2:好的,我發現即使畫布面板是透明的,它仍然隱藏了游戲物件。所以我的問題是,如果畫布面板在游戲物件的前面,我如何檢測游戲物件的點擊?
這是游戲物件的腳本:
public class Player : MovingCharacter, IPointerClickHandler, IPointerEnterHandler, IPointerDownHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Down");
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Clicked");
}
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("Entered");
}
//other code......
}
這是主相機:

這是我的游戲物件(播放器):

這是事件系統:

這是專案結構:

uj5u.com熱心網友回復:
使用圖層!
如果您希望能夠點擊物件,那么將您的選單放在一個特殊的層上,例如UI,并確保PhysicsRaycaster2D忽略該層。
UI 無論如何都是可互動的,因為 Canvas 自己的 raycaster 已經處理了 UI 元素。
一般來說,我還會確保只將這些元素標記為Raycast Target實際可互動的(例如按鈕)。這樣一個不可見的背景面板也不會阻止輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386430.html
標籤:统一3d
