如何将FBX文件动画曲线偏移至零帧?脚本运行异常求助
解决Maya脚本批量偏移FBX动画曲线至零帧时仅弹出导入窗口的问题
问题根源分析
脚本运行仅弹出导入窗口、后续操作停滞,核心原因有两点:
- FBX导入弹窗阻塞脚本:Maya默认打开FBX文件时会弹出导入选项窗口,脚本会暂停等待用户手动确认,导致后续代码无法执行。
- 路径字符错误:你的
folder_path中第一个字符是西里尔字母С(而非英文半角C),Maya无法正确识别该路径,可能导致找不到目标FBX文件。
此外,原脚本还存在鲁棒性问题:未判断场景是否存在关键帧,且会偏移场景中所有对象的关键帧(可能包含非骨骼对象)。
修正后的脚本
import os import glob import maya.cmds as cmds # 修正路径字符:使用英文半角C,确保Maya可识别路径 folder_path = "C:/123" # 批量获取目标文件夹下的所有FBX文件 fbx_files = glob.glob(os.path.join(folder_path, "*.fbx")) # 预设FBX导入选项,禁用弹窗 cmds.FBXImportOptions(s=True, v=False) # s=显示设置,v=关闭导入弹窗 for file_path in fbx_files: # 强制导入FBX,无弹窗自动完成 cmds.file(file_path, open=True, force=True, type="FBX", ignoreVersion=True, options="fbx") # 筛选场景中的骨骼对象(仅处理骨骼动画) skeletons = cmds.ls(type="joint") if not skeletons: print(f"文件 {file_path} 未检测到骨骼,跳过处理") cmds.file(new=True, force=True) continue # 获取骨骼的第一帧关键帧时间 first_key = cmds.findKeyframe(skeletons, which="first") if not first_key: print(f"文件 {file_path} 骨骼无关键帧,跳过处理") cmds.file(new=True, force=True) continue # 将所有骨骼关键帧偏移至零帧 cmds.keyframe(skeletons, edit=True, timeChange=-first_key) # 导出处理后的FBX文件 base_name = os.path.splitext(os.path.basename(file_path))[0] export_path = os.path.join(folder_path, f"{base_name}_offset.fbx") cmds.file( export_path, force=True, type="FBX export", options="v=0;", preserveReferences=True, exportSelected=False ) # 新建空场景,准备处理下一个文件 cmds.file(new=True, force=True) # 最后清理场景 cmds.file(new=True, force=True)
关键修改说明
- 禁用导入弹窗:通过
cmds.FBXImportOptions预设导入参数,打开文件时指定type="FBX"和options="fbx",实现无弹窗自动导入。 - 修正路径字符:替换西里尔字母为英文半角
C,确保Maya能正确定位文件路径。 - 精准处理骨骼:通过
cmds.ls(type="joint")筛选骨骼对象,避免偏移场景中无关对象的关键帧。 - 添加异常判断:检查骨骼存在性、关键帧存在性,避免脚本因异常情况中断。
内容的提问来源于stack exchange,提问作者Steve Maden
相关产品推荐
相关产品推荐

