maxscript零基础教学写一个批量改名并导出插件
这篇文章我会用一个案例去讲解如何写一个maxscript脚本,这里我用批量修改max文件的骨骼名称。
目标:修改一批max文件的bone00骨骼名称为bone99,然后导出fbx
操作方法:
1.打开max在菜单栏找到maxscript,然后新建脚本(newscript)
2.写一个ui,需要一个开始按钮 和文本框!写一个名为testddl_rollout的界面,createDialog 这个界面,界面尺寸200*200
然后添加一个按钮button,按钮的名称是start,文本框是edittext 名称daoru
rollout testddl_rollout "批量改名导出" ( button start "开始" pos:[80,20] edittext daoru "导入目录" fieldWidth:180 height:20 labelOnTop:true readOnly:false ) createDialog testddl_rollout 200 200
3.需要打开文件夹,并获取文件下所有的max文件
首先创建一个数组来保存获取到的文件
global my_files --文件数组
接下来写一个遍历文件夹的模块,方便随时调用
fn getFilesRecursive root pattern = ( dir_array = GetDirectories (root+"/*") --*wild-card for d in dir_array do join dir_array (GetDirectories (d+"/*")) my_files = #() if dir_array.count == 0 do append dir_array (root + "\\") for f in dir_array do join my_files (getFiles (f + pattern)) )
root 是文本框传入的一个路径地址
4.点击按钮打印获取的文件,看看是否获取正确(注意:文件内不要有其它子文件夹)
on start pressed do ( getFilesRecursive daoru.text "*.max" print (my_files) )
5.依次打开所有文件
rollout testddl_rollout "批量改名导出" ( button start "开始" pos:[80,20] edittext daoru "导入目录" fieldWidth:180 height:20 labelOnTop:true readOnly:false global my_files = #() --文件数组 fn getFilesRecursive root pattern = ( dir_array = GetDirectories (root+"/*") --*wild-card for d in dir_array do join dir_array (GetDirectories (d+"/*")) if dir_array.count == 0 do append dir_array (root + "\\") for f in dir_array do join my_files(getFiles (f + pattern)) ) on start pressed do ( getFilesRecursive daoru.text "*.max" for f in my_files do ( loadMAXFile f;--打开文件 ) ) ) createDialog testddl_rollout 200 200
6.改名:
$Bone00.name="Bone99"
选择bone00将她的name变成bone99
7.导出选择:
这里介绍一下maxscript的宏录制,他可以将你所有的操作步骤用脚本展示出来,你只需要将她的脚本复制到脚本编辑器里面就可以使用
这里actionMan.executeAction 0 "40011" -- File: 导出文件 就是一个导出fbx的宏,它是可以直接再次使用的
所以结合上面我们需要以下几个宏脚本1.选择物体2.导出fbx3.保存并关闭max文件
8.获取文件名 getFilenameFile f
9.输出:
filename =getFilenameFile f filepath=getFilenamePath f savepath=filepath+filename exportfile savepath #noprompt selectedOnly:true using:FBXEXP ok actionMan.executeAction 0 "40006" -- File: 保存文件 actionMan.executeAction 0 "40005" -- File: Reset File
10.最终组合代码:保存为"改名导出.ms"
rollout testddl_rollout "批量改名导出" ( button start "开始" pos:[80,20] edittext daoru "导入目录" fieldWidth:180 height:20 labelOnTop:true readOnly:false global my_files = #() --文件数组 fn getFilesRecursive root pattern = ( dir_array = GetDirectories (root+"/*") --*wild-card for d in dir_array do join dir_array (GetDirectories (d+"/*")) if dir_array.count == 0 do append dir_array (root + "\\") for f in dir_array do join my_files(getFiles (f + pattern)) ) on start pressed do ( getFilesRecursive daoru.text "*.max" for f in my_files do ( loadMAXFile f; $Bone00.name="Bone99" filename =getFilenameFile f filepath=getFilenamePath f savepath=filepath+filename exportfile savepath #noprompt selectedOnly:true using:FBXEXP ok actionMan.executeAction 0 "40006" -- File: 保存文件 actionMan.executeAction 0 "40005" -- File: Reset File ) ) ) createDialog testddl_rollout 200 200
扫描二维码推送至手机访问。
本サイト上に掲載の文章、画像、写真などを無断で複製することは法律で禁じられています。全ての著作権はGAMESHに帰属します。