各种软件的脚本写到后面都要涉及到一个问题,也就是如何建立初始化自定义命令或者菜单,打开软件的同时即执行相关命令或者初始化一些早已写好的脚本或者菜单。这个操作在Maya里的就相当于在userSetup.py里写代码一样。今天分享一下如何在Substance Designer里完成相关操作。
解决问题的基本思路还是要去官方文档查看相应的介绍,毕竟这些相关的接口都是官方写的:
这是在官网的User Documents里的介绍,大意是说,在SD里的插件本质上都是定义了initializeSDPlugin()函数的python文件或者python模块。
也就是说,在写好的这些外部插件正在被加载的时候,软件的程序会自动执行initializeSDPlugin()这个函数里的逻辑,在这些插件被取消加载的时候,程序会自动执行uninitializeSDPlugin()这个函数里的逻辑。
另一方面,关于如何控制加载外部插件的问题,SD2019新增的一个功能,也就是Plugin Manager,可以帮我们解决:
顺带一提,打开这个Plugin Manager的方式在Tools菜单栏下最后一个就是。另外需要了解的是,关于自定义插件的存放地址,除了默认的plugins目录,我们可以像自定义packege目录一样在Preferences中的Project/Python栏下来自定义新的python脚本查询目录:
定义好了自定义目录之后,我打开pycharm(其他任何ide环境都行),在这个新定义的地址创建一个python工程:
代码的具体内容不是重点,关键是这个两个上面提到的两个函数initializeSDPlugin()以及uninitializeSDPlugin()。先大致解释一下逻辑,我预先在initializeSDPlugin()中打印'Hello!'以及一个70到100之间的随机整数,同时利用Qt预选创建了一个自定义菜单。在uninitializeSDPlugin()下面直接打印一个'Bye!',也就是说如果我打开软件,即便什么事都不干,应该可以在控制台看到'Hello!'以及一个70到100之间的随机整数,并且会有一个自定义叫'CMenu1'的菜单:
确实是这样的。
系统是如何做到自动加载的?这个问题回到之前提过的Plugin Manager,我现在打开它,可以看到:
因为我在Preference下已经自定义过了新的脚本目录,所以Plugin Manager检测到了我的这个目录下有我刚刚创建的这个叫initialize_test的python文件,并且后面已经自动勾上了(自动的,非手动)。之所以会在启动的时候自动勾上并加载,就是因为我在这个文件里定义了那两个函数。如果我现在手动去了勾:
控制台最后出现了一个'Bye!',正是uninitializeSDPlugin()函数里的逻辑。
所以,综上所述,如果需要在软件一打开就预加载某些菜单或者函数,可以按照这样的做法,把逻辑写在检测目录范围内的某个python文件里的initializeSDPlugin()函数下。