假如游戲中有一個需要我們進行交互的物體,可以通過射線檢測來判斷角色與改物體是否滿足條件(比如面向它且在一定距離之內)
首先創建了一個雕像,並且添加了兩個粒子系統,smoke和fire,還有一個旋轉的text。
當我們靠近該雕像且正視它時,按鼠標左鍵會使得smoke,fire,text被激活。
雕像的藍圖:
雕像的藍圖如上,游戲開始時smoke,fire,text都是不可見的。
寫了一個函數active all,如果傳入值是true,那么會將三者的值改為可見,且將控制text 是否旋轉的text rotate布爾值也修改為true。
然后就是射線檢測了,思路是首先需要在角色身上創建一個插槽作為射線的起始點,然后在將control rotation的作為視角方向。
這樣發出的射線起始點為插槽,終點為 control rotation的vector * 長度 +插槽起始點。步驟如下:
在角色的骨骼里找到head,並且創建一個插槽,命名為socket_head;(如圖,可以通過控制柄來自定義插槽的位置,不一定非在頭上)
在角色藍圖中右鍵trace,會發現許多射線檢測的函數,這里使用的是 line trace by channel;
通過上述確定了射線的起始點和終點,這里射線的長度為400;輸出的是布爾值是射線是否被阻擋,如果被阻擋,強制轉換阻擋射線的物體為statue,如果轉換成功,說明是雕像阻擋了射線,再調用它的active all函數將smoke,fire,text激活。
剛進入游戲是這樣的:
靠近並點擊鼠標左鍵后被激活:
注意因為法線選擇的是control rotation,所以我們必須將屏幕中心點對准該雕像才有用。
法線也可以選擇其他方向。比如下面這個,是以鼠標在場景中的三維坐標為起點,方向為該點到攝像機
我們也可以把 draw debug type 打開,這樣就能看到射線的具體位置了。
再比如這樣些,使法線的方向一直為角色的forward方向,這樣即使我們旋轉control 也不會改變射線的發射方向