我的 FlipAnimation 插件在 2.62 版之前工作正常,但拒绝在新版本上工作。它的主要目的是获取当前活动动作的一系列关键帧,并在每个相关帧上执行一个Copy Pose
和。Paste X-flipped Pose
因此,根据所选模式,要么镜像整个动作,要么处理并附加指定范围。
现在从 2.63 开始,它“假装”工作,但粘贴的姿势不是 X 翻转的。我猜应该归咎于的代码片段:
for frame_item in self.keyframe_bone_dict.items ():
frame = frame_item[0]
bones = frame_item[1]
context.scene.frame_set(frame)
bpy.ops.pose.select_all(action='DESELECT')
for bone_item in bones.items ():
bone = bone_item[0]
bpy.context.active_object.data.bones[bone].select = True
bpy.ops.pose.copy()
if self.append_mode:
context.scene.frame_set(frame + self.append_frames_offset)
bpy.ops.pose.paste(flipped=True)
keyframe_bone_dict
包含每一帧以触及所有受影响骨骼的字典。所以我遍历所有关键帧,选择在此处定义了关键帧的骨骼。然后复制该姿势并在当前帧或在 append_frames_offset 之外的另一个帧处粘贴 X 翻转姿势。在正确的位置粘贴了关键帧,但它们的值不是 X 翻转的。
我在Blender API 更改处研究了 API 更改,但没有发现任何可疑的东西。仅对 KeyingSet 进行了一些小的更改,例如 name => bl_label。
还有什么变化吗?或者还有什么可能导致行为改变?
我刚开始阅读有关如何向 bf-extensions Trackers 提交代码的信息,然后在使用不同版本进行测试时遇到了这个问题。现在我真的坚持了,因为我是附加开发的新手。
非常感谢你的帮助
更新
我做了一些进一步的调查,发现粘贴姿势操作员成功返回后,以下调试语句
print (context.active_pose_bone, " (after): ", context.active_pose_bone.rotation_quaternion)
为所考虑的骨骼关键帧显示了合理的值,即正确的值。但是在附加组件完成后,相同的键要么保持不变,要么在其四元数成员中的变化可以忽略不计(0 - 1%)。有时受影响的骨骼略有变化。真的很奇怪:-(
更新 2 附加运行设计为仅在姿势模式下运行,面板在任何其他模式下都隐藏。在开始复制和粘贴过程之前,会执行一堆语句以确保满足所有先决条件。这包括:活动对象是否包含定义了至少一个动作的骨架,是否选择了动作,是否启用了仅使用活动关键帧自动插入关键帧和仅使用活动关键帧自动插入关键帧。
更多信息:
- 关于它以前如何工作的视频,应该再做一次
- 代码在 GitHub 上,随时 fork 项目
- 博客条目