You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MEL脚本在脚本编辑器正常,存为Maya Shelf Button后部分逻辑失效求助

解决Maya Shelf Button中MEL脚本无法切换面板布局的问题

问题场景

我有个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:12:41