工具简介
Maya Logic Compiler 是一个节点逻辑编译器,能够将场景中手动连接的节点网络"反编译"成可复用的 Python 代码。
开发动机: 每次在 Maya 中手动连接好节点实现功能后,转头又需要手写代码重现同样的逻辑。这个工具就是为了解决这个重复劳动问题而诞生的。目前工具还不支持 约束节点 和 驱动节点 等。
快速上手
版本信息
- 版本: 2.0.0
- 兼容性: Maya 2022+
- 开发环境: Python 3.x
安装使用
在 Maya Script Editor 中运行:
1
2
3
4
|
import sys
sys.path.append(r"D:\Pycharmpro\Maya2026_pro") # 修改为你的路径
from LogicCompiler import ui
ui.show()
|
基本操作流程

使用步骤:
- 添加驱动端(Source) → 选择场景中的驱动节点 → 点击"添加 Source"
- 添加被驱动端(Target) → 选择被驱动节点 → 点击"添加 Target"
- 添加中间节点(Intermediate) → 选择中间的所有逻辑节点 → 点击"添加中间节点"
- 生成代码 → 点击"生成代码"按钮
- 复制/测试 → 生成的代码会显示在下方文本框中,可以直接复制或在工具中测试
使用示例
示例场景
假设您在场景中创建了这样的节点连接:
1
2
3
4
5
6
|
pCube1 (Source)
└─ translateX ────────┐
↓
multiplyDivide1 (中间节点)
↓ outputX
pSphere1 (Target) ←─────┘
|
说明: pCube1 的 X 轴位移通过 multiplyDivide1 节点进行除法运算后,驱动 pSphere1 的位移。
操作步骤
- 选中
pCube1 → 点击"添加 Source"
- 选中
pSphere1 → 点击"添加 Target"
- 选中
multiplyDivide1 → 点击"添加中间节点"
- 点击"生成代码"
生成的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import maya.cmds as cmds
def build_connection_logic(source, target):
"""
重建节点逻辑
Args:
source (str): 驱动端节点
target (str): 被驱动端节点
"""
cmds.undoInfo(openChunk=True)
try:
# 1. Create Intermediate Nodes
multiplyDivide1_var = cmds.createNode('multiplyDivide',
name=f'{source}_multiplyDivide1_gen')
# 2. Set Attributes (Skip Default Values)
cmds.setAttr(f"{multiplyDivide1_var}.operation", 2) # Division
cmds.setAttr(f"{multiplyDivide1_var}.input2X", 2.0)
# 3. Connect Attributes
cmds.connectAttr(f"{source}.translateX", f"{multiplyDivide1_var}.input1X")
cmds.connectAttr(f"{multiplyDivide1_var}.outputX", f"{target}.translateX")
print(f'Success: Logic connected from {source} to {target}')
finally:
cmds.undoInfo(closeChunk=True)
|
使用生成的代码
1
2
3
4
5
6
7
8
9
10
11
|
# 应用到新的节点对
build_connection_logic('pCube2', 'pCylinder1')
# 批量应用
nodes_pairs = [
('pCube1', 'pSphere1'),
('pCube2', 'pSphere2'),
('pCube3', 'pSphere3'),
]
for source, target in nodes_pairs:
build_connection_logic(source, target)
|
工具功能
支持的数据类型
工具能够正确识别和处理以下 Maya 属性类型:
- 数值类型:
float, double, int, bool
- 向量类型:
double3, float3(如 translate, rotate, scale)
- 字符串类型:
string
- 枚举类型:
enum(如 multiplyDivide 的 operation)
- 矩阵类型:
matrix(如 multMatrix 节点)
- 消息类型:
message(使用 force=True 特殊处理)
多对多连接支持
工具支持灵活的节点连接模式:
一对多(One-to-Many):
1
2
|
一个 Source → 多个 Target
示例:一个控制器驱动多个物体
|
多对一(Many-to-One):
1
2
|
多个 Source → 一个 Target
示例:多个输入混合后驱动一个目标
|
多对多(Many-to-Many):
1
2
|
多个 Source → 多个 Target
示例:复杂的多对象联动系统
|
智能属性过滤
自动跳过以下属性:
- ✅ 默认值属性(无需手动设置)
- ✅ 已连接属性(避免代码冲突)
- ✅ 只读属性(系统属性)
只导出必要的属性:
- ✅ 用户修改过的值
- ✅ 未被连接的可设置属性
- ✅ 完整的数组和复合属性
节点网络验证
自动检测漏选节点:
如果节点网络是这样:
但你只选择了 B 作为中间节点,工具会提示:
1
|
Warning: 检测到漏选的节点: ['C']
|
这样可以确保生成的代码包含完整的节点逻辑。
名称智能清洗
自动处理特殊命名情况:
1
2
3
4
5
6
7
8
|
# 去除命名空间
"character:Spine_FK_ctrl" → "Spine_FK_ctrl_var"
# 去除层级路径
"|group1|pCube1" → "pCube1_var"
# 清理特殊字符
"node.with@special#chars" → "node_with_special_chars_var"
|