在 Maya python、运行 命令中,即使场景中不存在对象(字符串的一部分)

In Maya python, run command even if an object (part of a string) doesn't exist in the scene

我有这个代码

cmds.select('cat', 'dog', 'cow', 'mouse', hierarchy=True, r=True)
min_time = cmds.playbackOptions(q=True, min=True)
max_time = cmds.playbackOptions(q=True, max=True)
cmds.bakeResults(simulation=True, time=(min_time, max_time))

例如,如果 "dog" 对象不存在,则命令不会 运行 因为它正在寻找该对象。但我确实希望命令 select 所有其余对象,即使其中一个对象不存在,以便继续与其他对象一起烘烤。总而言之,即使场景中不存在所列对象中的一个,我该如何 运行 它呢?我需要这个脚本在不同的场景中 运行,有时并非所有这些对象都存在。谢谢

PS。这些对象只是一个示例,我必须始终将 20 个特定对象包含在此脚本中。

您可以使用cmds.ls 将一系列对象名称传递给它。它将 return 它在场景中找到的对象列表,以便过滤掉不存在的对象。通常,大多数命令不需要您传递 selection,因此您根本不需要 select 任何东西。这是一个坏习惯,因为它会强制重新绘制场景,而且这是很容易避免的额外开销。相反,我们可以将结果直接传递给 cmds.bakeResults:

import maya.cmds as cmds

min_time = cmds.playbackOptions(q=True, min=True)
max_time = cmds.playbackOptions(q=True, max=True)

objs = cmds.ls('cat', 'dog', 'cow', 'mouse')  # Returns a new list of objects it finds.

if objs:  # Only bake if there is at least one object.
    cmds.bakeResults(objs, simulation=True, time=(min_time, max_time))  # Pass new list as first argument.