[程式] Unity的animator

看板GameDesign (遊戲設計)作者 (渺小的正義)時間8年前 (2016/12/01 03:36), 8年前編輯推噓12(12030)
留言42則, 5人參與, 最新討論串1/1
各位安,最近照著網路上的影片教學學習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

12/01 03:49, , 1F
會變成true表示仍然有向下的速度分量,找出原因吧
12/01 03:49, 1F

12/01 04:19, , 2F
我有用log看rigibody.velocity.y,是0啊......
12/01 04:19, 2F

12/01 04:37, , 3F
確定是這行被執行嗎? 試試看改成 y < 0.01f
12/01 04:37, 3F

12/01 07:23, , 4F
不可相信你的浮點數
12/01 07:23, 4F

12/01 07:54, , 5F
推樓上,float比值都要考慮誤差
12/01 07:54, 5F

12/01 15:02, , 6F
rigibody的gravity scale會有影響嗎?
12/01 15:02, 6F

12/01 15:51, , 7F
我放棄深究了,決定多加一個判斷isground 囧
12/01 15:51, 7F

12/01 16:34, , 8F
一般平台動作遊戲不建議用物理模擬,詳見#1MzrJMwb
12/01 16:34, 8F

12/01 16:51, , 9F
我明白了,感謝
12/01 16:51, 9F

12/03 12:11, , 10F
condition?
12/03 12:11, 10F

12/04 21:43, , 11F
只能說物理引擎不是萬能的 尤其是碰撞判定
12/04 21:43, 11F

12/05 13:39, , 12F
可是碰撞不用Unity物理的話要怎麼辦 QQ?
12/05 13:39, 12F

12/05 15:19, , 13F
碰撞和投射可以用,解析(resolution)要自己處理
12/05 15:19, 13F

12/05 15:20, , 14F
否則會很飄,除非那是你要的風格,詳細仍請見#1MzrJMwb
12/05 15:20, 14F

12/13 04:28, , 15F
看了一下發現y會在0跟-1.77之間跳動,不明原因
12/13 04:28, 15F

12/13 04:49, , 16F
放個data break point找出原因吧
12/13 04:49, 16F

12/13 04:49, , 17F
你的單位是像素還是公尺? 請用後者
12/13 04:49, 17F

12/13 04:50, , 18F
還是Unity有自動單位轉換? 不清楚,先找出負值原因再說
12/13 04:50, 18F

12/13 15:43, , 19F
不打算深究這個問題
12/13 15:43, 19F

12/13 15:44, , 20F
因為算是跟著範例跑,往下的是用內建重力,之後做專案
12/13 15:44, 20F

12/13 15:44, , 21F
會再想辦法處理
12/13 15:44, 21F

12/13 16:28, , 22F
呃...-1.77跟-1.77e-15差非常多耶...
12/13 16:28, 22F

12/13 16:28, , 23F
後者是極小數,為上面討論的誤差,這種東西一定要懂啊
12/13 16:28, 23F

12/13 16:29, , 24F
不瞭解的話以後照樣碰壁
12/13 16:29, 24F

12/13 16:37, , 25F
補充,那是"科學記號"表示法 http://bit.ly/2hI5tZz
12/13 16:37, 25F

12/13 16:38, , 26F
1.xyzEn 代表 1.xyz * 10^n
12/13 16:38, 26F

12/13 17:03, , 27F
了解了,感謝,文組出身碰幾次壁我覺得還算正常XD
12/13 17:03, 27F
※ 編輯: reccaX (36.229.208.218), 12/13/2016 17:08:01

12/13 17:36, , 28F
我比較好奇的是為什麼範例的不會出現這個誤差....
12/13 17:36, 28F

12/13 17:37, , 29F
code是完全一樣的,是unity哪邊設定的問題嗎?
12/13 17:37, 29F

12/13 18:52, , 30F
主要是浮點數 有效位數的問題
12/13 18:52, 30F

12/13 18:52, , 31F
簡單寫個程式 0.0001 +1000次 單精度跟倍精度的結果
12/13 18:52, 31F

12/13 18:52, , 32F
是不一樣的
12/13 18:52, 32F

12/13 18:54, , 33F
範例的不會出現這種誤差 只能說是特別規劃過
12/13 18:54, 33F

12/14 02:08, , 34F
只能說範例執行環境天時地利人和,沒有產生誤差
12/14 02:08, 34F

12/14 02:09, , 35F
這種物理模擬的速度Y分量,一定都要考慮誤差
12/14 02:09, 35F

12/14 02:09, , 36F
所以要用 vel.y > -EPSILON, EPSILON為小正數
12/14 02:09, 36F

12/14 02:10, , 37F
範例的 vel.y > 0 是不良示範
12/14 02:10, 37F

12/14 02:10, , 38F
而且我建議習慣寫成 > 0.0f 或 > .0f
12/14 02:10, 38F

12/14 02:11, , 39F
就可以很明顯的看出是在比較可能會有誤差的浮點數
12/14 02:11, 39F

12/14 02:11, , 40F
↑噢,上上行不是指跟0比較,還是要跟EPSILON比較
12/14 02:11, 40F

12/14 02:12, , 41F
重點是常數要寫成浮點數表示法
12/14 02:12, 41F

12/14 02:42, , 42F
好的,很感謝大家熱心指導
12/14 02:42, 42F
文章代碼(AID): #1OFoefLz (GameDesign)
文章代碼(AID): #1OFoefLz (GameDesign)