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

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会在用户选择保存时触发命令,静态变量则避免不保存/保存场景时重复执行自定义逻辑。

验证步骤

  1. 运行调整后的scriptJob代码,或安装修改后的C++插件
  2. 修改场景后退出Maya,分别测试“保存”“不保存”“取消后再次退出”三种场景,确认自定义命令均正常执行

内容的提问来源于stack exchange,提问作者sandeep p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:15:02