0003 Maya插件开发之Python篇

Python,简直就是编程语言界的网红。就连CG行业都快被它一统天下,成行业标准了。特地去查了下,Python首次接近Top3。厉害了,我的P!有兴趣的可以去看看完整排行榜:https://www.tiobe.com/tiobe-index/ 下面是前十名:

TIOBE Index for August 2018

August Headline: Python is approaching the top 3 for the first time

话说Max从2014 Extension开始集成Python支持。2017版本开始,整个界面用Qt重写了。最新的2019版本中已经是PySide2,跟Maya2018已经同步。以后在Max,Maya中开发工具,完全可以复用一套UI。这个主题后面可以再写二篇文章。

今天主要写使用Python开发Maya插件的入门介绍。分为二部分:

1. 开发环境搭建(PyCharm与MayaCharm)

2. 一个完整的Maya Python插件

首先仍然是开发环境准备

下载PyCharm Community版本安装:

http://www.jetbrains.com/pycharm/download/#section=windows

安装完成后创建新项目(注意把Python解释器指定为mayapy.exe,这次我用的是Maya2017)

进去后我们安装MayaCharm插件:

受不了PyCharm那套默认的变态快捷键,我先把它改到VS的:

新建userSetup.py, 输入以下内容后放到: 我的文档\maya\2017\scripts目录里。这样以后每次开启Maya2017的时候会自动创建一个端口,PyCharm里写的代码就可以直接发送到Maya中执行了。

from maya import cmds
if not cmds.commandPort(':4434', q=True):
    cmds.commandPort(n=':4434')

开启Maya2017, 随便写段脚本按Alt+A运行测试MayaCharm插件(生成一堆随机旋转缩放的Cube):

MayaCharm插件装好了的话,Run菜单底部会多出三个子菜单,分别是将脚本发送到Maya里执行、执行选中的代码、连接到Maya脚本输出(底部有个Maya Log窗口,注意看上图底部)

一切就绪,准备开始写Maya Python插件。

Maya的Python API有二套: 1.0和2.0。 1.0类似MEL脚本语言,语法上一点都不像写Python, 如果刚从Python转过来写它就很是别扭,其次速度上也要比2.0更慢。所以与时俱进,直接用2.0。

Python插件的基本框架如下:

首先导入OpenMaya模块。2.0的API都在maya.api中:

from maya.api import OpenMaya as om

其次定义一个名为maya_useNewAPI的空函数。2.0跟1.0不一样的地方是需这个空函数,告诉Maya该插件使用的是2.0的新API:

def maya_useNewAPI():
    pass

创建一个继承自MPxCommand的类。跟C++原则上一模一样:

class HelloMaya(om.MPxCommand):

在类中实现二个方法, doIt用于命令具体做什么事,creator返回该类的实例化对象:

def doIt(self, args):
    print(u'Hello, Maya. 中文测试:你好,妈呀!')

@staticmethod
def creator():
    return HelloMaya()

最后在initializePluginuninitializePlugin函数中注册与注销插件(对应Maya中加载与卸载插件)。

这里Python插件与C++里不一样的地方是:用try...exception取代了需要返回的MStatus状态码。

写完就可以在Maya里加载插件测试了,Python方便的一点就在这了,不需要编译。事实上Python插件没法用pyc格式,你只能使用源码的py文件,否则Maya装作不认识^)^

这篇文章涉及的源代码页面在这里:

https://github.com/WendyAndAndy/MayaDev/tree/master/MayaPythonPlugin

或者克隆整个项目:

git clone https://github.com/WendyAndAndy/MayaDev.git

你也可以关注我的微信公众号:

猜你喜欢

转载自blog.csdn.net/whwst/article/details/81604902