2019年10月31日 星期四

[範例檔下載] 避免子彈穿越牆壁


本範例檔展示了使用 raycasthit 的方式,取代使用 OnTriggerEnter 偵測物體是否碰撞。
此範例畫面中有一個 拖曳條 ( Slider ) 是用來調控子彈的飛行速度,
Is Ray Cast Detected 勾選單(Toggle) 在勾取狀態下表示使用 raycasthit 的方式做碰撞偵測,
反之在為勾取的狀態下會是使用 OnTriggerEnter  的方式做碰撞偵測。

將【子彈速度調快】並且【不勾選 Is Ray Cast Detected 】,
你會發現子彈在高速移動時偶爾會穿越牆壁,
但是當子彈速度慢到一定程度時就幾乎不會穿越。
而在【勾選 Is Ray Cast Detected 】後則可修正此穿越的問題。


=====================================

從下圖frame 1~ frame 3 可看到子彈在每一frame時其位置朝右變化
在frame 3時剛好落在牆面上,因此順利觸發 OnTriggerEnter


但是如果子彈移動速度快時有可能剛好沒有弱在牆面上,
此時OnTriggerEnter就無法觸發而產生穿牆情況發生:


本文所使用的方案是:子彈每一禎都會朝移動方向打出一個射線
該射線的長度剛好是它每一禎的移動距離。
Frame1偵測射線有打到碰撞物時會記錄下射線與碰撞物的交會點,
並在Frame2的時候讓子彈出現在該點並執行擊中事件。
 

相關的討論可以參閱巴哈姆特討論版上的這篇






沒有留言:

張貼留言