【问题标题】:How to recive an input from the keyboad in Maya 2016 python如何在 Maya 2016 python 中接收来自键盘的输入
【发布时间】:2015-10-17 19:36:19
【问题描述】:

我想知道 Maya 2016 中是否有一个选项,python 脚本,可以从键盘获取数据,但没有打开 UI 窗口或类似 python中的'raw_input'命令,但是是实时的,就像你玩游戏一样,你按下一个按钮,一个动作正在发生。 有没有办法在 Maya python 脚本中做到这一点?

【问题讨论】:

  • 包括你目前尝试过的代码
  • 我没有尝试任何东西,因为我不知道是否有......技术,如果您在这里分享,我将不胜感激!
  • 您不会使用默认的 Maya 获得连续的密钥轮询。您也许可以使用 PySide 从 Maya 主窗口中获取信号,但这可能会出现问题,因为您将与 Maya UI 主循环竞争。如果您只想做不需要窗口的热键,只需创建 RuntimeCommand 对象
  • 但是我想使用 python,而不是 MEL。有没有办法用 python 创建这样的对象?
  • Pyside 是 QT 的 Python 包装器,QT 是运行 Maya 的 GUI 的窗口系统。 QT 确实知道如何侦听输入事件,要侦听您必须破解的按键。正如我所说,您可以使用 Python 制作可热键的 RuntimeCommands,让用户从键盘触发事件。

标签: python scripting keyboard maya autodesk


【解决方案1】:
def moveCurrent(direction):
    getSel = cmds.ls(sl=True)
    if getSel:
        if direction == "up":
            currentVal = cmds.getAttr("%s.tx" % getSel[0])
            cmds.setAttr("%s.tx" % getSel[0], currentVal + 10)
        elif direction == "down":
            currentVal = cmds.getAttr("%s.tx" % getSel[0])
            cmds.setAttr("%s.tx" % getSel[0], currentVal - 10)
        elif direction == "left":
            currentVal = cmds.getAttr("%s.tz" % getSel[0])
            cmds.setAttr("%s.tz" % getSel[0], currentVal - 10)
        elif direction == "right":
            currentVal = cmds.getAttr("%s.tz" % getSel[0])
            cmds.setAttr("%s.tz" % getSel[0], currentVal + 10)

cmds.nameCommand( 'moveCurrentSelectionFuncUp', ann='Move Selected Mode', c='python("moveCurrent(\\\"up\\\")")' )
cmds.nameCommand( 'moveCurrentSelectionFuncDown', ann='Move Selected Mode b', c='python("moveCurrent(\\\"down\\\")")' )
cmds.nameCommand( 'moveCurrentSelectionFuncLeft', ann='Move Selected Mode c ', c='python("moveCurrent(\\\"left\\\")")' )
cmds.nameCommand( 'moveCurrentSelectionFuncRight', ann='Move Selected Mode d ', c='python("moveCurrent(\\\"right\\\")")' )
cmds.hotkey( keyShortcut='F5', name='moveCurrentSelectionFuncUp' )      
cmds.hotkey( keyShortcut='F6', name='moveCurrentSelectionFuncDown' ) 
cmds.hotkey( keyShortcut='F7', name='moveCurrentSelectionFuncLeft' ) 
cmds.hotkey( keyShortcut='F8', name='moveCurrentSelectionFuncRight' )

确保在 sn-p 上运行后具有视口焦点。

【讨论】:

  • 谢谢!我有 2 个问题:1)如果我想让对象在按下热键时向一个方向移动?我怎么做? 2)如果我想让一个对象有多个热键?例如,如果我按 W 向前移动,S 向后移动,A 向左,D 向右?
  • 成功了!但是,如果我想在函数中不写位置(上、下、右和左)的情况下移动对象,我该怎么做?
  • 我不知道你是怎么做到的,你可能需要弄清楚:)。如果答案有帮助,请投票并选择作为答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
相关资源
最近更新 更多