Unity2D物理的几点探寻

说起来一直是用的直接修改速度来实现的各类移动,这样就导致在做移动平台啊,爆炸推开等类似物理效果的时候需要增加额外的代码来驱动角色(当然也可以通过状态机来解决,但还是感觉不爽),今天闲暇就简单看了下一直没有怎么用上的线性阻力和转动阻力,当然这篇专栏主要讲线性阻力.
首先要做的是找到这个值具体是怎么用的,但是文档写的也是非常的...

只说了个大概,说了等于没说,于是我就大胆假设,小心求证.
假设这个系数是一个和速度相关的值,那么在阻力不为零的情况下,只要我保证施加在物体身上的力F不变,那么和这个力F反方向的空气阻力F(空气阻力)将会逐渐增大,直到这个两个力的大小持平,使物体由变加速直线运动转变为匀速直线运动.
(测试图略,就是不截图,诶)
经过测试,发现这个系数真的就是如同我猜想的那样,就是一个简单的乘法,即:
F(空气阻力)= -1 × 空气阻力系数 × F(除了空气阻力以外的其他力)
非常直白,举个例子就是,当阻力设置为9.8的时候,1倍重力的情况下,物体下落的最终速度为竖直方向的1,即Vector3.down,
有了这个基础,如果我们想要基于空气阻力来设置玩家最终速度,并且以AddForce为驱动的话,以水平方向为例子,可以轻松算出
V(最终速度)=F(水平方向推力) / drag(空气阻力)
提高推力和阻力并不会影响最终速度,但是会显著影响到达最终速度的时间,手感也会更加干脆.
(但是带来了下落变慢的问题...什么叫有舍有得啊)
摩擦力这种初中就学过的知识我就我展开了,大家应该都知道F(摩擦)=F × f