看板 GameDesign 關於我們 聯絡資訊
各位安,最近照著網路上的影片教學學習unity的基礎, 但是目前遇到了問題,看的是這個影片: https://youtu.be/5ghbRb0bBJs
當中有個段落是要設定在降落而非著地的時候, animator的bool land為true(約19分18秒) 但是只要我打上那段code,即使在落地的情況下,land仍然為true, 並且因為在地面上,所以會不停地在false跟true當中切換。 由於這段code並不困難,我實在不知道該怎麼處理這個問題, 不知道有沒有人可以幫忙看看可能是甚麼原因? 該段code: if (myRigidbody.velocity.y < 0) { myAnimator.SetBool("land", true); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.161.185 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1480534569.A.57D.html
cjcat2266: 會變成true表示仍然有向下的速度分量,找出原因吧 12/01 03:49
reccaX: 我有用log看rigibody.velocity.y,是0啊...... 12/01 04:19
cjcat2266: 確定是這行被執行嗎? 試試看改成 y < 0.01f 12/01 04:37
wix3000: 不可相信你的浮點數 12/01 07:23
cjcat2266: 推樓上,float比值都要考慮誤差 12/01 07:54
reccaX: rigibody的gravity scale會有影響嗎? 12/01 15:02
reccaX: 我放棄深究了,決定多加一個判斷isground 囧 12/01 15:51
cjcat2266: 一般平台動作遊戲不建議用物理模擬,詳見#1MzrJMwb 12/01 16:34
reccaX: 我明白了,感謝 12/01 16:51
guagin: condition? 12/03 12:11
cowbaying: 只能說物理引擎不是萬能的 尤其是碰撞判定 12/04 21:43
wix3000: 可是碰撞不用Unity物理的話要怎麼辦 QQ? 12/05 13:39
cjcat2266: 碰撞和投射可以用,解析(resolution)要自己處理 12/05 15:19
cjcat2266: 否則會很飄,除非那是你要的風格,詳細仍請見#1MzrJMwb 12/05 15:20
reccaX: 看了一下發現y會在0跟-1.77之間跳動,不明原因 12/13 04:28
cjcat2266: 放個data break point找出原因吧 12/13 04:49
cjcat2266: 你的單位是像素還是公尺? 請用後者 12/13 04:49
cjcat2266: 還是Unity有自動單位轉換? 不清楚,先找出負值原因再說 12/13 04:50
reccaX: http://i.imgur.com/13dviuL.png 不打算深究這個問題 12/13 15:43
reccaX: 因為算是跟著範例跑,往下的是用內建重力,之後做專案 12/13 15:44
reccaX: 會再想辦法處理 12/13 15:44
cjcat2266: 呃...-1.77跟-1.77e-15差非常多耶... 12/13 16:28
cjcat2266: 後者是極小數,為上面討論的誤差,這種東西一定要懂啊 12/13 16:28
cjcat2266: 不瞭解的話以後照樣碰壁 12/13 16:29
cjcat2266: 補充,那是"科學記號"表示法 http://bit.ly/2hI5tZz 12/13 16:37
cjcat2266: 1.xyzEn 代表 1.xyz * 10^n 12/13 16:38
reccaX: 了解了,感謝,文組出身碰幾次壁我覺得還算正常XD 12/13 17:03
※ 編輯: reccaX (36.229.208.218), 12/13/2016 17:08:01
reccaX: 我比較好奇的是為什麼範例的不會出現這個誤差.... 12/13 17:36
reccaX: code是完全一樣的,是unity哪邊設定的問題嗎? 12/13 17:37
cowbaying: 主要是浮點數 有效位數的問題 12/13 18:52
cowbaying: 簡單寫個程式 0.0001 +1000次 單精度跟倍精度的結果 12/13 18:52
cowbaying: 是不一樣的 12/13 18:52
cowbaying: 範例的不會出現這種誤差 只能說是特別規劃過 12/13 18:54
cjcat2266: 只能說範例執行環境天時地利人和,沒有產生誤差 12/14 02:08
cjcat2266: 這種物理模擬的速度Y分量,一定都要考慮誤差 12/14 02:09
cjcat2266: 所以要用 vel.y > -EPSILON, EPSILON為小正數 12/14 02:09
cjcat2266: 範例的 vel.y > 0 是不良示範 12/14 02:10
cjcat2266: 而且我建議習慣寫成 > 0.0f 或 > .0f 12/14 02:10
cjcat2266: 就可以很明顯的看出是在比較可能會有誤差的浮點數 12/14 02:11
cjcat2266: ↑噢,上上行不是指跟0比較,還是要跟EPSILON比較 12/14 02:11
cjcat2266: 重點是常數要寫成浮點數表示法 12/14 02:12
reccaX: 好的,很感謝大家熱心指導 12/14 02:42