MEL脚本在脚本编辑器正常,存为Maya Shelf Button后部分逻辑失效求助
问题场景
我有个MEL脚本用来修复Graph Editor显示空白的视觉bug,逻辑是拆分Graph Editor面板、关闭它,再切换到已保存的“Animation”面板布局。脚本在Maya脚本编辑器或底部MEL输入框里运行完全正常,但存成Shelf Button后,只能完成拆分并关闭Graph Editor的操作,切换面板布局的步骤无法执行。试过保存成独立.mel文件调用、更换Shelf Button调用方式,均未解决。
原脚本
if (`window -q -ex graphEditor1Window`) deleteUI graphEditor1Window; else tearOffPanel "Graph Editor" "graphEditor" true; deleteUI graphEditor1Window; setNamedPanelLayout "Animation";
问题根源
MEL的if/else语法要求:如果分支包含多行代码,必须用{}包裹。原脚本中else后面仅tearOffPanel属于分支内容,后续的deleteUI和setNamedPanelLayout是独立语句——脚本编辑器的执行环境相对宽松,这些语句能侥幸执行,但Shelf Button的执行时机和交互状态限制会导致后续语句被跳过,因此只完成了前半部分操作。
修正后的脚本
基础修复版
if (`window -q -ex graphEditor1Window`) { deleteUI graphEditor1Window; setNamedPanelLayout "Animation"; } else { tearOffPanel "Graph Editor" "graphEditor" true; deleteUI graphEditor1Window; setNamedPanelLayout "Animation"; }
兼容窗口创建延迟版
考虑到tearOffPanel创建窗口可能存在微小延迟,可加入waitWindow确保窗口就绪后再操作:
if (`window -q -ex graphEditor1Window`) { deleteUI graphEditor1Window; setNamedPanelLayout "Animation"; } else { tearOffPanel "Graph Editor" "graphEditor" true; waitWindow graphEditor1Window; // 等待窗口创建完成 deleteUI graphEditor1Window; setNamedPanelLayout "Animation"; }
解决效果
将修正后的脚本替换Shelf Button中的代码,或保存为独立.mel文件调用,即可完整执行拆分关闭Graph Editor、切换到“Animation”面板布局的全流程。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

