看板 GameDesign 關於我們 聯絡資訊
※ 引述《wix3000 (癢,好吃)》之銘言: : 當腳色從上坡切換到下坡時,會因為慣性浮空一小段時間 : 只是就個人的遊戲經驗,大部分的橫向卷軸遊戲在高低差表面上移動時都是平貼著地面的 : 不知道這個部分是運用到了什麼機制讓它們能夠平貼著 : 或者說有什麼更好的架構來處理移動功能? 這就要談到平台動作遊戲(platformer)角色移動機制的一道分水嶺 看你是要 "物理模擬(physics-based)" 還是 "緊密操控(tight control)" 物理模擬為主的遊戲 就是用你的做法,設定角色的速度,然後交給物理引擎去模擬 像小小大星球就是這種作法 優點是可以很容易地讓角色跟環境做物理互動,因為角色也是物理模擬的一部份 缺點就像你說的,角色會有 "浮浮的感覺(floaty)" 而抓地困難 大部分平台動作遊戲採用緊密操控的作法 角色不屬於物理引擎模擬的一部份,與環境的互動是用額外的邏輯去處理 本世代遊戲的作法,是用 "射線投射(ray cast)" 將角色"釘"在地上 假設+Y軸為正上方 角色移動的時候,先決定下個frame的XZ位置 然後往-Y方向做ray cast,找出把角色"釘"在地上的正確Y軸位置 如此一來,角色就會緊緊的抓住地面 處理跳躍的時候,也不依靠物理引擎,而是直接對transform的Y分量做修改 當角色在空中落下的時候 每個frame在當時位置和下個frame的預期位置形成的線段,對地面做碰撞偵測 如果線段與地面沒有相交,那就按照預期位置更新角色位置 若有相交,則把角色的位置設定到交點,這樣角色就著地完成了 以上是處理Y分量的方式 處理XZ分量的方法就有很多種,端看環境的碰撞資料格式 也有混搭的作法 角色移動用設定速度和物理模擬的方式更新 但是每個frame也做-Y方向的ray cast,找出抓地點 如果抓地點沒有離角色太遠,就直接設定transform的Y分量,把角色重新"釘"回地上 補充:依照需求,除了ray cast 也可以考慮 "形狀投射(shape cast)",只是比較消耗資源 -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 172.91.156.131 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1459049686.A.EA5.html ※ 編輯: cjcat2266 (172.91.156.131), 03/27/2016 11:43:35
wix3000: 感謝回應,嗯~所以果然沒有簡單設定就能實現的方法嗎 03/27 18:50
juicefish: Unity用物理引擎解的話 應該是調整重量或重力 03/28 00:47
cjcat2266: 還是有可能會浮空,仍需要額外邏輯把角色確實釘在地上 03/28 08:26
cjcat2266: 要做出緊密操控的平台動作遊戲,只靠物理模擬是不夠的 03/28 08:27
cjcat2266: 玩家對緊密操控的期望,是其確定性(determinism) 03/28 08:29
cjcat2266: 全依賴物理模擬而不用額外邏輯,極有可能破壞這項期望 03/28 08:30
cjcat2266: 主打緊密操控,只要有1%機率會浮空,就會讓玩家不爽 03/28 08:31
johnny94: 同意,尤其是很吃操作的動作遊戲,更是不能仰賴通用的物 03/28 11:35
johnny94: 理引擎 03/28 11:35
azureblaze: 不釘地板其實也可以靠n個frame內有碰到地板就算著地 03/28 14:41
azureblaze: 這樣可以處理稍微飄起來的狀況,個人試起來感覺還不錯 03/28 14:42
azureblaze: 在遊戲界「簡單設定就能實現」的效果通常不是你要的 03/28 14:44
azureblaze: 需求變化實在太多了,除非你想要看起來千篇一律 03/28 14:45
wannasaynone: 推實用 03/29 10:09
sdsg5bpnl: 實用推 03/30 21:11
lemmii: push 03/30 22:48