Re: [請益] Unity-橫向卷軸的移動控制

看板GameDesign (遊戲設計)作者 (CJ Cat)時間9年前 (2016/03/27 11:34), 9年前編輯推噓6(6010)
留言16則, 8人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/27 18:50, , 1F
感謝回應,嗯~所以果然沒有簡單設定就能實現的方法嗎
03/27 18:50, 1F

03/28 00:47, , 2F
Unity用物理引擎解的話 應該是調整重量或重力
03/28 00:47, 2F

03/28 08:26, , 3F
還是有可能會浮空,仍需要額外邏輯把角色確實釘在地上
03/28 08:26, 3F

03/28 08:27, , 4F
要做出緊密操控的平台動作遊戲,只靠物理模擬是不夠的
03/28 08:27, 4F

03/28 08:29, , 5F
玩家對緊密操控的期望,是其確定性(determinism)
03/28 08:29, 5F

03/28 08:30, , 6F
全依賴物理模擬而不用額外邏輯,極有可能破壞這項期望
03/28 08:30, 6F

03/28 08:31, , 7F
主打緊密操控,只要有1%機率會浮空,就會讓玩家不爽
03/28 08:31, 7F

03/28 11:35, , 8F
同意,尤其是很吃操作的動作遊戲,更是不能仰賴通用的物
03/28 11:35, 8F

03/28 11:35, , 9F
理引擎
03/28 11:35, 9F

03/28 14:41, , 10F
不釘地板其實也可以靠n個frame內有碰到地板就算著地
03/28 14:41, 10F

03/28 14:42, , 11F
這樣可以處理稍微飄起來的狀況,個人試起來感覺還不錯
03/28 14:42, 11F

03/28 14:44, , 12F
在遊戲界「簡單設定就能實現」的效果通常不是你要的
03/28 14:44, 12F

03/28 14:45, , 13F
需求變化實在太多了,除非你想要看起來千篇一律
03/28 14:45, 13F

03/29 10:09, , 14F
推實用
03/29 10:09, 14F

03/30 21:11, , 15F
實用推
03/30 21:11, 15F

03/30 22:48, , 16F
push
03/30 22:48, 16F
文章代碼(AID): #1MzrJMwb (GameDesign)
文章代碼(AID): #1MzrJMwb (GameDesign)