Unity版本:Unity 2019.4.4f1
3ds Max 版本:2018 (至少要 2017 以上的版本)
在Unity中,点击Window→Package Manager,然后找FBX Exporter;
如果在左边的列表中找不到,则在Advanced中勾选 Show preview packages :
选中FBX Exproter,然后点Instailling进行导入。
之后选择Edit→Project Settings→Fbx Export,选择你的3d建模软件(3ds Max、Maya等)。我是用的3ds Max 2018,注意,这个插件只适用于 3dsMax 2017 以上的版本。
然后点击那个 Install Unity Integration 这个按钮,选择文件路径未 3ds max 2018 安装目录下的Plugins 文件夹中。(理论上你也可以选择你自己喜欢的文件夹,这个是选择脚本插件的位置)。第一次安装的时候会打开一次3ds max,完成之后关了就完事了。
这样就完成安装了。
我再安装插件的时候就遇到这个问题,反正3dsMax就弹出这么一个警告:
-- 无法转换:undefined 到类型 : String
有些离谱,我打开3dsMax的调试器看了下,那个脚本第一行就报错了。他的源代码(configureUnityFbxForMax.ms)如下:
temp = pathConfig.GetDir(#userStartupScripts) + "/" + UnityPluginScript_Name;
deleteFile temp;
copyFile UnityPluginScript_Source temp;
maxIniFile = (GetMAXIniFile())
unityCategory = "Unity"
setINISetting maxIniFile unityCategory "UnityProject" UnityProject
setINISetting maxIniFile unityCategory "UnityFbxExportSettings" UnityFbxExportSettings
setINISetting maxIniFile unityCategory "UnityFbxImportSettings" UnityFbxImportSettings
quitmax()
所以我只能理解为他自定义的宏 UnityPluginScript_Name 出错了,没能转换成字符串。虽然我不会MaxScript,但是根据我的猜测,他这个脚本前三行的目的如下:
1、把一个叫 temp 的路径下的文件删除。
2、然后把 UnityPluginScript_Source 这个路径下的文件复制到 temp 的路径下,起到覆盖的效果。
然后问题就是 UnityPluginScript_Name 这个定义的变量没了嘛,那补齐理论上就OK了。理论上,他第一行定义的变量就没成功,那后续的什么 UnityProject 啊 UnityFbxExportSettings 啊应该也不行才对。
于是经过一些摸索,在你之前的选择的插件目录下找到 configureUnityFbxForMax.ms ,在最前添加以下代码:
global UnityPluginScript_Source = @"D:/Autodesk/3ds Max 2018/Plugins/Integrations/Autodesk/max/scripts/UnityFbxForMaxPlugin.ms";
global UnityPluginScript_Name = @"UnityFbxForMaxPlugin.ms";
global UnityProject = @"F:/Project/FantacyArtSource/";
global UnityFbxExportSettings = @"D:/Autodesk/3ds Max 2018/Plugins/Integrations/Autodesk/max/scripts/unityFbxExportSettings.ms";
global UnityFbxImportSettings = @"D:/Autodesk/3ds Max 2018/Plugins/Integrations/Autodesk/max/scripts/unityFbxImportSettings.ms";
这个是定义路径的,注意改成自己项目的路径。然后就可以不报错了。
在上一步的基础上如果还是有问题,在3dsMax中没有出现Unity 的选单,但是没有报错,那么按照以下步骤进行检查:
找到 C:\Users\Administrator\AppData\Local\Autodesk\3dsMax\2018 - 64bit\CHS 文件夹下的 3dsMax.ini 文件,打开看,里面能不找到如下图所示的部分:
就是这个带[Unity]标签的部分。如果有则说明 configureUnityFbxForMax.ms 是成功运行了,但是3ds Max里没有正确显示的问题。后面我们就排除这个问题就OK了。
在3ds Max 中点击自定义 -> 自定义用户界面,然后选择菜单子选项。
然后在类别中找到Unity类别,然后分别拖动到 文件-导入和文件-导出中:
当然,你也可以给他分配一个快捷键,你也可以保存这个配置。
这样目前的故障就算排除完成了。
(Unity - New FBX Exporter in 2017.2 | Page 13 - Unity Forum)
之后选择我们要导出的物体的所有依赖项目,右键选择 Convert To FBX Linked Prefab ... :
之后会出现一个对话框:
需要注意的就是你的Fbx导出位置和Prefab导出位置。他会生成一个新的Prefab,一个新的FBX文件。然后新的Prefab就对应的FBX文件,只要对原FBX文件进行修改就可以在Unity里产生效果了。
其实只要有这个FBX文件,就可以在别的3D软件里操作他了。例如新的FBX文件进行修改之后再覆盖原FBX。但是这样就必须要在别的软件里不停地导入、导出,其实还是有些不方便。
在3dsMax 中,文件→导入→Import an FBX from a Unity project and auto-configure for exproting . (怎么名字这么长……)
然后找到我们之前的项目文件,找到刚才我导出用的那匹马。之后工程如下:
可以看到左侧的面板上已经显示出了一个主模型、骨骼、以及一个UnityFbxExportSets的物体。之后我们在3ds max里面对齐进行一些操作,这里我给他加上一个角。
我这里就改了一下顶点,简单弄一弄就完事了。
然后选择导出,这里就只导出模型就完事了。
之后直接跳转到Unity,可以看到我们的模型已经变过了:
完成,这样就完成了Unity 和 3ds Max 的互相联动。
其实这么一套操作我感觉其实……没有很大用处。
首先一般的工作流程是美术直接导出FBX到Unity的项目,程序引用这个FBX的数据。其实和他目前的流程是一样的,不过区别就是用FBX Exporter的话你不用一直在“导出”对话框里面选文件。你只要在3dsMax里面点一下导出就完事了,算了省了一步吧。如果美术小伙伴是刚上手的,他就不用熟悉项目结构,直观在3ds Max里面搞搞就可以了。
对程序员来说我觉得是比较鸡肋的,他那个Link Prefab其实可有可无,反正程序一般也会自己操作这个。而且他那个Link Prefab还容易出些Bug,这个就遇到了再说了。
然后我本来以为他是可以和Unity完美联动的,可以优化一些Fbx 和 3ds Max之间的导入,但其实并没有。如何你有一个FBX文件,你用FBX Exporter导出,和直接在3ds Max里面导入其实结果是一样的。比如你的骨骼都会变成辅助对象,虽然有蒙皮但其实并不能做动画。
不过对于游戏流程来说有个明显的加强,就是程序或者策划可以现在Unity用Cube之类的来搭建场景、模型之类的。然后直接把Unity里的GameObject导出FBX给美术做,美术一上手就知道了一些模型的大概形状、参数之类的。可以实现程序/策划 就白模快乐地搭起来,不用理会美术资源;同理,美术也可以有一部分工作和程序解耦。
总之,就是目前虽然有些鸡肋,还有Bug,但是肯定是有流程优化的。