教程

如何让任意 3D 物体弹跳、旋转、晃动或挤压拉伸

给金币、宝箱、路牌等道具加上弹跳、旋转、晃动、摇摆、漂浮或挤压拉伸动画,下载 GLB 用于 Unity、Unreal、Godot 或 three.js。浏览器或代码均可。

2026年10月25日

道具是最容易制作、却最难做动画的模型。金币、宝箱或药水瓶没有骨架,所以大多数人只能在引擎里移动和旋转整个物体来做动画。这样能得到一枚旋转的金币,却永远做不出落地时被压扁的宝箱、Q 弹晃动的果冻或被风吹弯的路牌,因为这些都需要网格本身发生形变。

afk.ai 的物体绑定解决了这个问题。它会在任意模型内部匹配一套小骨架,并把网格蒙皮到骨架上,让物体可以弯曲、挤压和拉伸,还附带九个现成就能播放的动画。

物体骨架

afk.ai 物体骨架:中间一条脊柱,横向分布着三排骨骼

物体骨架有 21 个关节:模型中间一条脊柱,加上横跨脊柱的三排骨骼,全部根据你的模型匹配。由于网格蒙皮到了这些骨骼上,物体在运动时会弯曲、变形,这是单纯的移动加旋转动画做不到的。

九个动画

动画效果时长适用于
Bounce上下弹跳0.8 秒拾取物、收集品、待拾取的物品
Squash_Stretch挤压和拉伸1 秒卡通道具、按钮、任何有弹性的东西
Spin旋转一整圈1 秒金币、宝石、奖励
Float缓慢地上下浮动3 秒悬浮物品、能量道具、浮空岛
Wobble果冻般的晃动1.3 秒刚落地或被击中的东西
Shake快速抖动1 秒锁住的门、答错、受到伤害
Sway轻柔地摇摆2 秒树、路牌、灯、植物
Flag_Wave一道波浪贯穿整个物体1 秒旗帜、横幅、布料
Pop_In弹出出现0.7 秒生成、解锁、UI 弹出

在浏览器中给物体做动画

  1. 打开 afk.ai/rig,把你的模型拖进去(GLB、glTF 或 FBX;OBJ、STL 和压缩包里的模型会自动转换)。
  2. 询问模型类型时,选择 Object or prop(物体或道具)。如果只想让模型的一部分动起来,先选择 Select a part(选择部件,详见下文)。
  3. 在你的模型上预览动画。
  4. 下载包含所需动画的已绑骨 GLB。

只让模型的一部分动起来

很多时候,道具只有一部分需要动:旗帜动而旗杆不动,招牌动而挂招牌的柱子不动,植物动而花盆不动,还有台灯的灯罩、基座顶上的水晶。在 afk.ai/rig 上,你可以只给这一部分绑骨,模型的其余部分原封不动。

  1. 把模型拖进去,询问模型类型时,选择 Select a part(选择部件),而不是 Whole model(整个模型)。
  2. 圈出你想做动画的部分,或者点击某个零件把它整个选中。用 Add(添加)和 Remove(移除)细化选区,用 Turn view(旋转视图)绕着模型查看,Select through to the back(穿透选择背面)还会把你看不到的面也选上。
  3. 点击 Continue(继续),然后选择这个部分是什么,比如旗帜、招牌或植物就选 Object or prop。
  4. AI 只给选中的部分绑骨。预览动画,然后下载。

没有选中的部分都会保持静止,并和动起来的部分一起保存在同一个 GLB 里,所以飘扬的旗帜会带着旗杆,摇摆的招牌会带着柱子,直接放进场景就能用。这个功能适用于任何体型,不只是物体:选中底座上的雕像或展台上的角色,就只有人物会动。

选择部件只能在网站上进行。API 会给整个模型绑骨。

用代码给物体做动画

afk.ai API 以同样的方式给物体绑骨,可以一次处理整个文件夹的道具,也可以处理玩家上传的物体:

npx afk-rig coin.glb --type object --animations Spin,Bounce -o coin.rigged.glb

在 AI 智能体中,afk-rig MCP 服务器只需一次工具调用就能完成同样的事。

在引擎中播放

three.js

import * as THREE from 'three'
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'

const gltf = await new GLTFLoader().loadAsync('coin.rigged.glb')
scene.add(gltf.scene)

const mixer = new THREE.AnimationMixer(gltf.scene)
mixer.clipAction(THREE.AnimationClip.findByName(gltf.animations, 'Bounce')).play()

const clock = new THREE.Clock()
renderer.setAnimationLoop(() => {
  mixer.update(clock.getDelta())
  renderer.render(scene, camera)
})

Godot

把 GLB 拖进项目。导入后的场景里有一个 AnimationPlayer,所有动画都按名称列在其中,所以 $AnimationPlayer.play("Spin") 就能播放其中一个。如果想让动画循环播放,在导入设置中设置它的循环模式。

Unity

安装 glTFast 包,把 GLB 拖进项目。以 Generic(通用)绑定类型导入(不要用 Humanoid),并把动画片段添加到 Animator Controller 中。

Unreal Engine

Unreal 5.1 及以上版本可以直接把 GLB 连同动画导入为骨骼网格体。

小技巧

  • 把两种运动结合起来。让引擎负责物体沿路径移动,让绑定负责形变:一枚边旋转边飞向计分板的金币,或者一个用 Pop_In 掉进场景、再用 Wobble 稳住的宝箱。
  • 凭感觉挑选。Bounce 和 Float 给人的感觉是“快来捡我”。Shake 表示“不行”。Sway 则是“活着,但很平静”。
  • 一套设置,所有道具通用。每个物体绑定都有同样的九个动画名称,所以一套动画设置就能用于你所有的拾取物。

常见问题

可以只让模型的一部分动起来吗?

可以。在 afk.ai/rig 上选择 Select a part(选择部件),圈出要做动画的部分,再选择它是什么。只有这一部分会被绑骨和添加动画,模型的其余部分保持静止,并一起包含在下载文件中。

哪些物体适用?

各种道具:金币、宝石、宝箱、木箱、瓶子、招牌、旗帜、灯、植物、家具、食物和玩具。只要不是角色或动物,就按物体来绑骨。

动画可以用在商业游戏中吗?

可以。骨架和动画采用 CC0(公共领域)授权,你的模型仍归你所有。

也能给角色和动物做动画吗?

能。afk.ai 还能给人、四足和有蹄动物、鸟、龙、恐龙、蜘蛛、蛇、鱼、袋鼠、青蛙和幽灵绑骨,每种都有自己的动画。

给你的模型绑骨

在浏览器中 AI 自动绑骨,下载带动画的 GLB。

给模型绑骨

更多教程