Source Filmmaker Python脚本导入模型时animSet未赋值引用报错如何解决
SFM Python导入模型报错修复方案
错误根因
- 函数调用顺序与命名空间错误:代码先执行
newAnimSet = sfmUtils.CreateModelAnimationSet( baseName, modelPath ),之后才定义CreateModelAnimationSet函数,执行调用时函数尚未加载;且你自定义的函数不属于sfmUtils内置工具命名空间,无需加此前缀。 - 变量未做兜底初始化:
animSet仅在模型加载成功、动画集创建成功的分支中被赋值,一旦模型路径错误、模型加载失败、动画集创建失败,就会出现变量未定义就被返回的情况,是触发UnboundLocalError的直接原因。
修复后代码
baseName = "secret_spy" modelPath = "models\\player\\hwm\\spy.mdl" # 模型路径中的反斜杠需要双写转义 # 先定义函数,再执行调用 def CreateModelAnimationSet( baseName, modelPath ): ''' 创建模型对应的动画集并将模型添加到当前场景 ''' # 初始化animSet为None做兜底,避免分支未覆盖时变量未定义 animSet = None shot = sfm.GetCurrentShot() model = sfm.CreateModel( modelPath ) if model != None: animSet = sfm.CreateAnimationSet( baseName, target=model ) if animSet != None: dag = vs.CreateElement( "DmeDag", baseName, shot.GetFileId() ) dag.AddChild( model ) shot.scene.AddChild( dag ) return animSet # 直接调用自定义函数,无需加sfmUtils前缀 newAnimSet = CreateModelAnimationSet( baseName, modelPath )
额外排查项
如果修复后仍无法正常加载模型,确认modelPath对应的模型文件存在且在SFM的资源搜索路径中即可。
内容的提问来源于stack exchange,提问作者Joshua Rosenzweig
相关产品推荐
相关产品推荐

