Blender 2.x的游戏引擎有个很好的功能就是记录动画,可惜的是只有刚体、软体、静态属性的物体能被记录,而且有子物体也不会被记录。

在搜索了很多资料后终于找到了一个简单满足我要求的一个小脚本。(下载链接在文末)

文件包含两个脚本:object2text.py 、text_to_keyframe.py

  1. object2text.py 主要功能是记录动画数据到csv文件
    主要变量:
  • target_object:需要记录动画的物体名字
  • rate:动画数据记录的速度
  • 默认记录的csv文件位置是在Blender安装文件夹,想要改变保存位置需要修改 write_data()函数中的filename参数
  1. text_to_keyframe.py 主要功能是读取csv文件
    主要变量:
  • target_object:目标物体的名称
  • framerate:读取动画的速率
  • filename:csv文件的位置

使用方法

保存动画数据

  1. 添加Always(总是)传感器,并且命名为“recorder”
  2. 添加一个Python传感器,然后脚本选择 object2text.py
  3. 添加 游戏引擎 促动器,并且命名为“quit_game"
  4. 在文本编辑器中打开 object2text.py ,修改'target_object'和'rate'变量
  5. 运行游戏记录动画数据,退出游戏一定要用Q键退出,否则数据不会被写入

读取动画数据

需要注意的是当前该脚本只记录了位置和旋转数据

  1. 打开 'text_to_keyframe.py' 脚本并且修改其中的变量,要与 object2text.py 中的变量设置相对应
  2. 运行脚本,然后播放动画

错误解决

在测试过程中发现,记录的csv文件中会有空行导致读取失败,解决方法是将 object2text.py 文件中的

with open(filename, 'wt') as fout:

修改为:

with open(filename, 'wt', newline='') as fout:

下载地址:记录动画脚本文件

参考地址:FROM BLENDER GAME TO ANIMATION