主題

亂七八糟的_遊戲開發誌[0] 開篇與接地檢測

Daily | 2019-01-20 15:48:39 | 巴幣 28 | 人氣 1823

嗨嗨大家好 我是Daily

不知道為甚麼開始寫巴哈小屋文章了
今後會不定期更新小屋文章
內容主要放在自己製作遊戲的心得
歡迎各位給留言給我意見

話說是要寫遊戲開發誌
但我連要做甚麼遊戲都沒有決定呢!(((゚Д゚;)))
目前在想要個東方同人遊戲 或是其他拉

開發工具主要是使用爛大街的Unity
---------------------------------------------------

主要還是先來搞個腳色控制器吧
unity內建的腳色控制器非常陽春 (看看人家隔壁棚UE4
要有好得操作手感大概都要自己再寫過

簡單介紹下
所謂的腳色控制器就是負責處理玩家的輸入
說簡單一點 就是一段處理你按鍵盤後要幹嘛的程式碼
這段程式碼會知到目前腳色的一些狀態(like 站著 跑步 摔落中等等...
然後再做出反應(摔落中案跳會沒反應拉 跑步中鬆開按鍵會停下等等...

首先我來處理判斷"腳色是否站在地板上"的判定吧!
通常我們會利用物理引擎提供的碰撞檢測來檢測腳色是否站在地面上
而用的其實也不是普通的碰撞檢測這麼簡單
而是一個叫做"光線投射"(RayCast)的功能
簡單來說可以想像成你拿一支雷射筆射出一條雷射向地板下射
雷射筆會射在地板上出現一個光點
RayCast厲害得是你可以設定這條光要射多遠
他還會告訴你這條光他打到甚麼物體有沒有打到
連打中的座標都知道 (厲害ㄅ
這樣就可以知道腳色距離地面多遠 有沒有碰到地面了(多方便阿!
但是
RayCast也會造成一些問題
例如:

大家可能在某些遊戲看過類似的畫面
當腳色太靠近邊緣會造成判定上的問題
腳色的碰撞明明還在平台上但是RayCast卻打不到東西
這樣就會造成問題

如果要解決問題就要用RayCast的加強版"SphereCast"
這個SphereCast其實原理跟RayCast一樣
但不同之處是SphereCast投射的不是細細的光線 而是一顆又大又粗的
因為是發射出去把球的軌跡畫出來就會像一個膠囊狀


畫得好醜(´・_・`)
這樣就不會漏判定拉

內容也差不多了這篇先這樣ㄅ
送禮物贊助創作者 !
0
留言
2019-09-24 16:11:21
懂了 所以應該是投射點在transform.position的關係吧
OnDrawGizmos我是想說比較好看情況才寫在那 之後會改回去
很謝謝你的幫忙 我把你寫的這整個系列都看過了 很有幫助 希望能再寫下去
2019-09-23 23:20:10
真的嗎 太感謝了 我這邊才怕你不方便QQ
https://drive.google.com/open?id=11rtKPDeeWC9LAJjhcWF7hvxR114okMNE
2019-09-24 15:30:16
稍微幫你看了下
遊戲邏輯不要寫在OnDrawGizmos中
OnDrawGizmos只有在圖標(Gizmos)更新的時候會觸發
而且正式輸出專案的時後OnDrawGizmos是不會被執行的
這樣問題很多 還是寫在常規的Update比較好
還有LayerMesk記得要設置
LayerMesk的邏輯是只跟選中的層互動
還有你寫在OnDrawGizmos裡面的邏輯
SphereCast射出設線的時候如果距離目標太近會產生漏過
把投射點提高 或是SphereCast的半徑縮小試看看
2019-09-24 15:32:11
https://imgur.com/QVdMSVz
頭射點高低差異
2019-09-23 20:33:43
剛剛做了一些測試發現他是對模型本身起反應
看來不是capsule的問題 用了LayerMask也無法解決
2019-09-23 22:39:24
如果方便的話可以提供檔案我找時間幫你看看
2019-09-23 14:30:16
只有capsule 大小也有調過了不過還是一樣 還是說跟你用的sperecast有差別呢?
我是參考這個的
https://youtu.be/CoTK39SZft8
2019-09-23 16:05:03
大概猜到為甚麼了
sperecast 會對自身的capsule起反應
要用LAYER MASK分開
2019-09-22 22:30:39
不好意思 想問一下SphereCast的參數是怎麼設定的呢?
我在做的時候碰上一個問題是角色的腳只要碰到Sphere的半徑他就會被判定是沒有接觸到地面
2019-09-23 12:58:10
角色身上應該沒有其他碰撞框了吧? 大小可以看第2篇
TOP
開啟 APP

巴哈姆特 APP
最舒適便利的瀏覽體驗

開啟巴哈姆特 APP