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

Maya Python脚本报‘no object matches name:p’,无法生成连接管道

解决Maya Python脚本中的‘no object matches name:p’错误及管道生成问题

错误原因

  1. 参数解析与变量未定义错误:第18行的cmds.curve调用中,你未将创建的曲线赋值给变量就返回,后续变量引用混乱导致Maya错误解析参数,抛出“找不到名为p的对象”的异常。
  2. 变量引用混乱:多处未正确接收函数返回值——创建球体时未将返回的球体对象赋值给sphere就添加到列表;创建管道时未保存曲线对象就返回;循环中错误使用sphere[i]而非spheres[i],且未将创建的管道曲线赋值给pipe就添加到列表。

修正后的完整代码

import maya.cmds as cmds
import random

def create_random_sphere():
    x = random.uniform(-100, 100)
    y = random.uniform(-100, 100)
    z = random.uniform(-100, 100)
    
    sphere = cmds.polySphere()[0]
    cmds.move(x, y, z, sphere)
    
    return sphere
    
def create_pipe(start, end):
    # 获取球体的世界空间坐标
    start_pos = cmds.xform(start, query=True, translation=True, worldSpace=True)
    end_pos = cmds.xform(end, query=True, translation=True, worldSpace=True)
    # 创建连接两点的直线曲线
    curve = cmds.curve(degree=1, point=[start_pos, end_pos])
    return curve

def create_spheres_pipes(num_spheres):
    spheres = []
    
    for _ in range(num_spheres):
        sphere = create_random_sphere()
        spheres.append(sphere)
        
    pipes = []
    
    for i in range(len(spheres)-1):
        pipe = create_pipe(spheres[i], spheres[i+1])
        pipes.append(pipe)
        
    # 连接最后一个与第一个球体形成闭环
    pipe = create_pipe(spheres[-1], spheres[0])
    pipes.append(pipe)
    
    return spheres, pipes

def createspheresandpipes(num_spheres):
    spheres, pipes = create_spheres_pipes(num_spheres)
    
    # 创建挤出管道用的圆形曲线
    circle = cmds.circle(normal=(0,1,0), radius=0.2)[0]
    
    for pipe in pipes:
        # 清空选择避免干扰
        cmds.select(clear=True)
        cmds.select(circle, pipe)
        # 沿路径挤出生成管道
        cmds.extrude(et=2, ucp=1, fpt=True, upn=True)
        
createspheresandpipes(10)

关键修正说明

  • create_pipe函数:添加worldSpace=True确保获取世界坐标,将创建的曲线赋值给curve后返回,解决变量未定义问题。
  • create_spheres_pipes函数:
    • 创建球体时,将create_random_sphere()的返回值赋值给sphere再添加到列表。
    • 创建管道时,正确使用spheres[i]和spheres[i+1]作为参数,将返回的曲线赋值给pipe后添加到列表。
  • 挤出管道部分:添加cmds.select(clear=True)清除历史选择状态,确保挤出操作正确执行。

内容的提问来源于stack exchange,提问作者Taylor Richardson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:00:04