作者reccaX (渺小的正義)
看板GameDesign
標題[程式] Unity的animator
時間Thu Dec 1 03:36:07 2016
各位安,最近照著網路上的影片教學學習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://webptt.com/m.aspx?n=bbs/GameDesign/M.1480534569.A.57D.html
1F:推 cjcat2266: 會變成true表示仍然有向下的速度分量,找出原因吧 12/01 03:49
2F:→ reccaX: 我有用log看rigibody.velocity.y,是0啊...... 12/01 04:19
3F:→ cjcat2266: 確定是這行被執行嗎? 試試看改成 y < 0.01f 12/01 04:37
4F:推 wix3000: 不可相信你的浮點數 12/01 07:23
5F:推 cjcat2266: 推樓上,float比值都要考慮誤差 12/01 07:54
6F:→ reccaX: rigibody的gravity scale會有影響嗎? 12/01 15:02
7F:→ reccaX: 我放棄深究了,決定多加一個判斷isground 囧 12/01 15:51
8F:推 cjcat2266: 一般平台動作遊戲不建議用物理模擬,詳見#1MzrJMwb 12/01 16:34
9F:→ reccaX: 我明白了,感謝 12/01 16:51
10F:推 guagin: condition? 12/03 12:11
11F:推 cowbaying: 只能說物理引擎不是萬能的 尤其是碰撞判定 12/04 21:43
12F:推 wix3000: 可是碰撞不用Unity物理的話要怎麼辦 QQ? 12/05 13:39
13F:推 cjcat2266: 碰撞和投射可以用,解析(resolution)要自己處理 12/05 15:19
14F:→ cjcat2266: 否則會很飄,除非那是你要的風格,詳細仍請見#1MzrJMwb 12/05 15:20
15F:→ reccaX: 看了一下發現y會在0跟-1.77之間跳動,不明原因 12/13 04:28
16F:推 cjcat2266: 放個data break point找出原因吧 12/13 04:49
17F:→ cjcat2266: 你的單位是像素還是公尺? 請用後者 12/13 04:49
18F:→ cjcat2266: 還是Unity有自動單位轉換? 不清楚,先找出負值原因再說 12/13 04:50
20F:→ reccaX: 因為算是跟著範例跑,往下的是用內建重力,之後做專案 12/13 15:44
21F:→ reccaX: 會再想辦法處理 12/13 15:44
22F:推 cjcat2266: 呃...-1.77跟-1.77e-15差非常多耶... 12/13 16:28
23F:→ cjcat2266: 後者是極小數,為上面討論的誤差,這種東西一定要懂啊 12/13 16:28
24F:→ cjcat2266: 不瞭解的話以後照樣碰壁 12/13 16:29
26F:→ cjcat2266: 1.xyzEn 代表 1.xyz * 10^n 12/13 16:38
27F:→ reccaX: 了解了,感謝,文組出身碰幾次壁我覺得還算正常XD 12/13 17:03
※ 編輯: reccaX (36.229.208.218), 12/13/2016 17:08:01
28F:→ reccaX: 我比較好奇的是為什麼範例的不會出現這個誤差.... 12/13 17:36
29F:→ reccaX: code是完全一樣的,是unity哪邊設定的問題嗎? 12/13 17:37
30F:→ cowbaying: 主要是浮點數 有效位數的問題 12/13 18:52
31F:→ cowbaying: 簡單寫個程式 0.0001 +1000次 單精度跟倍精度的結果 12/13 18:52
32F:→ cowbaying: 是不一樣的 12/13 18:52
33F:→ cowbaying: 範例的不會出現這種誤差 只能說是特別規劃過 12/13 18:54
34F:推 cjcat2266: 只能說範例執行環境天時地利人和,沒有產生誤差 12/14 02:08
35F:→ cjcat2266: 這種物理模擬的速度Y分量,一定都要考慮誤差 12/14 02:09
36F:→ cjcat2266: 所以要用 vel.y > -EPSILON, EPSILON為小正數 12/14 02:09
37F:→ cjcat2266: 範例的 vel.y > 0 是不良示範 12/14 02:10
38F:→ cjcat2266: 而且我建議習慣寫成 > 0.0f 或 > .0f 12/14 02:10
39F:→ cjcat2266: 就可以很明顯的看出是在比較可能會有誤差的浮點數 12/14 02:11
40F:→ cjcat2266: ↑噢,上上行不是指跟0比較,還是要跟EPSILON比較 12/14 02:11
41F:→ cjcat2266: 重點是常數要寫成浮點數表示法 12/14 02:12
42F:→ reccaX: 好的,很感謝大家熱心指導 12/14 02:42