推 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
→ 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
→ 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: 因為算是跟著範例跑,往下的是用內建重力,之後做專案 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: 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