作者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/cn.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