Maya 2019.3中quitApplication脚本任务选保存后失效求助
解决Maya退出时scriptJob在保存后失效的问题
问题根源
当你用quitApplication事件绑定scriptJob时,Maya在用户选择“保存”后会先执行保存流程,此时原quitApplication事件已被触发一次,而保存完成后的退出流程不会再次触发该事件,导致自定义命令无法执行。
解决方案
方案1:C++插件直接绑定消息回调(推荐)
既然你用C++插件实现,建议直接调用Maya API的消息回调,替代scriptJob,能可靠覆盖所有退出场景:
#include <maya/MSceneMessage.h> #include <maya/MGlobal.h> // 自定义退出回调函数 void myExitCallback(void* clientData) { MGlobal::executeCommand("MyCustomCommand"); } // 插件初始化时注册回调 MStatus initializePlugin(MObject obj) { MStatus status; MSceneMessage::addCallback(MSceneMessage::kBeforeFinalize, myExitCallback, nullptr, &status); return status; } // 插件卸载时移除回调 MStatus uninitializePlugin(MObject obj) { MStatus status; MSceneMessage::removeCallback(myExitCallback, &status); return status; }
kBeforeFinalize消息会在Maya即将退出、所有场景清理前触发,无论用户选择保存、不保存还是自动保存后退出,都能执行自定义命令。
方案2:调整scriptJob事件绑定
如果坚持用scriptJob,需同时绑定beforeSave和quitApplication事件,避免保存后漏触发:
// 全局过程,避免重复执行 global proc runMyCustomCommand() { static int hasRun = 0; if (!hasRun) { MyCustomCommand; hasRun = 1; } } // 绑定两个事件 scriptJob -e "quitApplication" "runMyCustomCommand" -per; scriptJob -e "beforeSave" "runMyCustomCommand" -per;
beforeSave会在用户选择保存时触发命令,静态变量则避免不保存/保存场景时重复执行自定义逻辑。
验证步骤
- 运行调整后的scriptJob代码,或安装修改后的C++插件
- 修改场景后退出Maya,分别测试“保存”“不保存”“取消后再次退出”三种场景,确认自定义命令均正常执行
内容的提问来源于stack exchange,提问作者sandeep p
相关产品推荐
相关产品推荐

