Maya插件命令执行后如何持久化生成的内存数据?
解决方案:Maya插件跨执行会话保留内存数据
1. 全局模块变量(最便捷方案)
直接在插件所属的Python模块里定义全局变量存储数据——Maya加载模块后,模块会常驻内存,除非手动重载或重启Maya,完全满足跨命令执行的内存存储需求。
示例代码:
# 插件模块 my_plugin.py # 全局变量存储跨执行的数据 _session_data = {} class MyMayaCommand(MPxCommand): def doIt(self, args): global _session_data # 读取上一次执行的留存数据 last_result = _session_data.get("last_generated", None) if last_result: print(f"复用上次数据: {last_result}") # 生成新数据 new_data = {"target_mesh": "pCube1", "param": 1.5} # 更新全局变量 _session_data["last_generated"] = new_data self.setResult(new_data) # 插件注册逻辑...
注意:数据仅在当前Maya会话有效,关闭即丢失;Maya主循环是单线程,多实例共享时无需额外处理线程安全。
2. Maya全局命名空间存储
利用Maya自带的全局存储机制,不管Python还是Mel都能访问,适合需要跨脚本/命令共享数据的场景。
用optionVar存储简单数据
适合字符串、数字、列表这类基础类型:
import maya.cmds as cmds class MyMayaCommand(MPxCommand): def doIt(self, args): data_key = "my_plugin_last_data" # 读取留存数据 if cmds.optionVar(exists=data_key): last_data = cmds.optionVar(query=data_key) print(f"上次执行数据: {last_data}") # 生成并存储新数据 new_data = ["pSphere1", "pCylinder1", 3.0] cmds.optionVar(clear=data_key) cmds.optionVar(stringValue=(data_key, str(new_data)))
序列化存储复杂数据
用json把字典、嵌套结构转成字符串存储:
import json import maya.cmds as cmds class MyMayaCommand(MPxCommand): def doIt(self, args): data_key = "my_plugin_complex_data" # 读取并反序列化 if cmds.optionVar(exists=data_key): serialized_str = cmds.optionVar(query=data_key) last_data = json.loads(serialized_str) print(f"上次复杂数据: {last_data}") # 生成新数据并序列化存储 new_data = {"selected_objects": cmds.ls(selection=True), "settings": {"offset": 2.5}} cmds.optionVar(clear=data_key) cmds.optionVar(stringValue=(data_key, json.dumps(new_data)))
额外说明:可以加cmds.optionVar(save=True)让数据在Maya重启后依然保留,但数据不绑定场景文件。
3. 自定义节点(场景绑定场景下使用)
如果需要数据随场景文件保存、或要在场景中可视化编辑数据,才考虑自定义节点。这个方案实现成本高,但能让数据和场景强绑定,重启Maya打开场景后依然可用。
核心思路:
- 继承
MPxNode创建自定义节点,添加对应属性(比如message属性关联场景对象、stringArray存序列化数据) - 执行命令时,先检查场景中是否存在该节点,不存在则创建;读取节点属性获取上次数据,更新后再写回属性
但如果只是内存中跨命令执行临时保留数据,前两种方案比自定义节点便捷太多。
方案优先级
- 全局模块变量:实现最简单,纯内存临时存储,会话内有效
- Maya optionVar:支持跨脚本共享,可选择是否跨Maya会话保留,无需额外节点
- 自定义节点:仅适合数据需绑定场景、持久化到文件的场景
内容的提问来源于stack exchange,提问作者Hisen
相关产品推荐
相关产品推荐

