目录刚体物理

动画

刚体物理

刚体行为把一个 2D 图层变成实心的物体:它受重力下落,与别的刚体相撞,会堆叠、滑动和弹跳。运动每次都由编辑器从头算出,查看器和导出的结果一致;想亲手细修时,可以把它烘焙成普通的关键帧。

添加刚体

行为在属性面板里,位于图层设置下方的行为组。刚体通过图层自己的位置和旋转来移动它,所以这个图层必须是 2D、没有父级,而且位置没有拆分成单独的维度。

  1. 选中要动的图层,在查看器或时间轴里都可以。

  2. 展开属性里的行为组,点刚体。新刚体一开始是一个贴合图层大小的动态矩形。

  3. 给它一个落脚的地方:把另一个图层也设为刚体,刚体类型选静态,比如拿一个又长又扁的矩形形状图层当地面;或者在物理世界⁠ (在新标签页打开)里把合成边界设成实心。

  4. 播放。刚体会下落、相撞,最后停稳。改动任何设置,整段运动都会重新计算。

查看器里三个方块已经落在地面上,其中一个斜着立在角上;属性面板的行为组里是这个方块的刚体设置。
  1. 方块在这一帧被模拟到的位置。
  2. 动态、静态或运动学。
  3. 刚体用来碰撞的轮廓。
  4. 弹性大小;密度和摩擦就在旁边。
  5. 把运动变成关键帧。

每个刚体在组里是一张卡片:勾选框可以关掉它,箭头调整行为的先后顺序,垃圾桶删除它。一个合成里的所有刚体共处同一个世界。

动态、静态与运动学刚体

  • 动态:受重力下落,会被其他刚体推动,能滑动、翻滚和弹跳。新刚体默认是动态的。
  • 静态:永远不动。它保持进入世界那一刻的位置和旋转,适合做地面、墙壁和斜坡;之后的关键帧不再跟随。
  • 运动学(跟随关键帧):按自己的位置和旋转关键帧运动,把挡路的动态刚体推开,自己却不会被推动:比如球拍、移动的平台,或一只把桌上东西扫下去的手。

刚体的形状

形状是刚体用来碰撞的轮廓,以图层自己的像素计,也就是锚点所在的坐标。新刚体会贴合图层在播放头处画出的内容:形状图层取路径连同描边,文字图层取字形(段落文字取整个文本框),其他图层取整幅画面;矩形取这个范围,圆取较短的一边,多边形取四个角。

  • 矩形:以形状中心为中心、大小为矩形尺寸的矩形。
  • 圆形:以形状中心为圆心、半径为圆半径的圆,适合会滚动的球、硬币和轮子。
  • 多边形(凸包):围住各个多边形顶点的轮廓,用于矩形和圆都套不准的形状。轮廓上的凹处会被填平,就像在这些点外面套一根橡皮筋。
  • 改了画面要重新对尺寸。贴合只在添加刚体时做一次;之后改了图形或文字,把矩形尺寸或圆半径重新调到与画面一致。
  • 图层的缩放会一起缩放形状,但只在刚体进入世界的那一帧读取一次。

材质与初始运动

  • 密度:每平方像素的质量。只有刚体之间的比例有意义:密度大一倍的刚体能把轻的推开。
  • 弹性:0 完全不弹,1 弹回落下时的高度;0.8 大约弹回三分之二。两个刚体接触时,按弹性大的那个算。
  • 摩擦:0 像冰面一样打滑,最大为 2。
  • 初速度(像素/秒)和初始转速(°/秒):刚体进入世界时已有的移动速度和转速,用来做抛、踢或翻滚。转速为正时顺时针转。
  • 刚体何时加入。它在世界的开始帧与图层入点中较晚的那一帧进入,取那一帧的位置和旋转,在图层出点离开。进入之前,图层播放它自己的动画。

物理世界

一个合成里的所有刚体共处同一个世界。没有添加物理世界时,重力以 981 像素/秒² 竖直向下,模拟从第一帧开始,合成的四边是敞开的。要改这些,在行为组里点物理世界;每个合成最多一个。

  • 重力(像素/秒²):刚体被拉向哪个方向、拉得多猛,Y 轴朝下。默认值是按 100 像素合 1 米换算的地球重力,刚体从 1080 像素高的画面顶端落到底部大约一秒半;设为 0, 0 则刚体悬浮。按比例调大调小可以改变节奏。
  • 开始帧:模拟从哪一帧开始。在此之前,每个刚体播放自己的动画,所以可以先用关键帧把方块摆到位,再从那里放手让它落下。
  • 实心边界:在画面外侧紧贴边缘处放上实心的墙:无、地面、地面与两侧或四边。
  • 每帧步数:每帧求解几步,默认 4。快速或很薄的刚体互相穿过时调高它。
  • 关掉物理世界就停止模拟,每个刚体回到播放自己的动画。

烘焙为关键帧

想亲手细修运动时,点任意一张刚体卡片上的菱形按钮将刚体烘焙为关键帧。整个世界一起烘焙:每个刚体的位置和旋转在合成的每一帧都得到一个线性关键帧,刚体和物理世界行为被移除,画面与之前完全一样。这是一步操作,撤销一次就能把行为找回来。

烘焙出的就是普通关键帧:可以在时间轴或图表编辑器⁠ (在新标签页打开)里移动、删除或加缓动。

须知

  • 模拟每次都从世界的第一帧算起,结果完全相同;所以无论直接跳到某一帧还是一路播放过去,查看器和导出里的那一帧都一样。
  • 只有刚体自己的设置起作用:刚体在世界里时,它位置或旋转上的表达式和其他行为都不会被读取。
  • 刚体是合成平面上的扁平形状;3D 图层不能做刚体。
  • 多边形的顶点要逐个填写,不会从画面的透明度自动描出来。
  • 重力很大时,速度很快的球在落地那一帧可能会陷进地面几个像素。
  • 你让 Agent 做时,它也能设置刚体,并作为草稿交给你审核。