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

Maya脚本字符串转浮点数报错修复请求:带用户输入偏移量的动画复制粘贴功能

Maya脚本字符串转浮点数报错修复请求:带用户输入偏移量的动画复制粘贴功能

嘿,我来帮你解决这个字符串转浮点数的报错问题!

首先咱们先捋清楚报错的根源:

  • 当用户点击Cancel按钮或者直接关闭弹窗时,cmds.promptDialog()会返回None,这时候直接用float()转换肯定会抛出错误
  • 如果用户输入的不是有效数字(比如字母、乱码符号),同样会触发字符串转浮点数的异常

下面是修复后的代码,我不仅处理了这些异常情况,还优化了脚本的逻辑(没必要在循环里重复复制关键帧,一次就够啦):

import maya.cmds as cmds

# 获取选择的对象列表
selected_objs = cmds.ls(sl=True)
# 先检查是否选够了对象:至少需要一个源对象+一个目标对象
if len(selected_objs) < 2:
    cmds.warning("请至少选择两个对象,第一个作为动画源,其余作为目标!")
    raise SystemExit()

# 取第一个对象作为动画源
sel = selected_objs[0]
# 获取源对象关联的动画曲线
animCurves = cmds.listConnections(sel, type='animCurve')
# 检查源对象是否有动画
if not animCurves:
    cmds.warning(f"对象 {sel} 没有绑定动画曲线!")
    raise SystemExit()

# 获取动画的时间范围
startTime = cmds.findKeyframe(animCurves[0], which='first')
endTime = cmds.findKeyframe(animCurves[0], which='last')

# 获取用户输入的偏移量
offset_input = cmds.promptDialog(
    title='Offset',
    message='Enter offset value:',
    button=['OK', 'Cancel'],
    defaultButton='OK',
    cancelButton='Cancel',
    dismissString='Cancel'
)

# 判断用户是否取消了操作
if offset_input is None:
    cmds.info("用户取消了动画偏移操作")
    raise SystemExit()

# 处理输入不是数字的情况
try:
    offset = float(offset_input)
except ValueError:
    cmds.error("请输入有效的数字作为偏移量!")
    raise SystemExit()

# 只需要复制一次源动画(放在循环外更高效)
cmds.copyKey(sel, time=(startTime, endTime))

# 给每个目标对象粘贴带偏移的动画
for obj in selected_objs[1:]:
    cmds.pasteKey(obj, time=(startTime + offset, endTime + offset))

我还额外加了几个实用的前置检查:

  • 确保用户至少选择两个对象,避免空列表或单对象的无效操作
  • 检查源对象是否真的有动画曲线,防止后续findKeyframe报错
  • 捕获非数字输入的异常,给用户明确的错误提示

这样修改后,你的脚本就能应对各种异常场景,不会再因为字符串转浮点数出问题啦!

备注:内容来源于stack exchange,提问作者flys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:22:59