Unity运行时导出FBX模型的解决方案

前言

本文章是写如何在运行时导出场景中的游戏对象到FBX格式的文件。该解决方案支持导出游戏对象在Hierarchy下的层次结构、Transform组件信息、材质贴图、静态Mesh网格、SkinnedMesh、骨骼信息以及动画等。也支持将场景中的摄像机组件以及灯光组件导出到FBX模型。

目前该解决方案仅支持Legacy动画的导出,不支持Generic、以及Humanoid动画的导出。因为其中用的一些API只能在Legacy动画下使用,所以只能导出Legacy动画。但是可以导出当前游戏对象下所有的动画剪辑。

1.添加FBX SDK在运行时的支持

你可以通过以下方式在Unity项目里添加Autodesk FBX SDK for Unity:

点击菜单栏的“Windoes”选项,选择“Package Manager”;

在Package Manager面板中左上角点击“+”,然后选择Add package from git url ;

在弹出的输入框中输入“com.autodesk.fbx@4.1.1”,然后点击“Add”添加包;

添加过Autodesk FBX SDK for Unity之后,该包仅支持编辑器模式下使用。如果想在运行时也被支持,需要做以下操作:

点击菜单栏的“Edit”选项,然后选择“Project Settings”,弹出的窗口中选择“Player”;

然后在“Other Settings”选项卡中,找到“Script Compilation”选项;

在“Scripting Define Symbols”框中输入“FBXSDK_RUNTIME”,然后点击“Apply”按钮即可;

 注:该包在运行时只有Windows/OSX/Linux三个平台可以支持,其他平台暂时不能支持;

2. 导入 Exporter FBX Model

导入unitypackage包:Exporter FBX Model

该包的下载地址:点我

2.1 简介

导入包体后,打开默认的示例场景:SampleScene

整个工程只有三个脚本:

1.编辑器脚本:ClipInfo:该脚本为编辑器脚本,主要用于将现有的动画剪辑数据序列化到本地,然后在运行时进行读取。该脚本只会在打包成EXE之前使用一次,保证StreamingAssets文件目录下有可供运行时读取的文件。

2.运行时脚本:DeserializeAnimationInfo:该脚本主要作用是在运行时将StreamingAssets文件目录下的动画数据进行反序列化。

以上两个脚本,如果没有导出动画的需求,完全可以抛弃掉;

3.运行时脚本:Exporter FBX:该脚本用于导出场景中的游戏对象到FBX文件。默认的导出路径为StreamingAssets文件夹(路径可以在代码里修改)。

2.2 操作

想要在运行时导出FBX模型,最关键的脚本是ExporterFBX脚本,将该脚本挂载到场景中的任意模型上即可。将要导出的游戏对象拖拽到该脚本的ExportModels字段下。

该脚本的入口方法为ExportAll,他有三个参数:

List<GameObject > unityGos:要导出的Unity对象列表;

bool animationOnly:是否只导出动画(不导出材质贴图以及网格信息);

bool notAnimation:是否不导出动画(为true就是不导出动画,只导出材质贴图及网格信息);

如果不需要导出动画信息,只需要把notAnimation参数设置为true即可;

如果需要导出动画信息,就需要做如下操作:

1.在编辑器模式下,将动画的剪辑信息序列化到本地:

 选择菜单栏的Windeow——>ClipInfo,之后会弹出一个对话框;

将Project视图下的动画剪辑拖拽到ClipInfo面板下的Clip选择框中,也可以直接在该选择框后面进行选择; 

指定好动画剪辑之后,下面会显示出来动画的关键帧信息,这时候点击Save按钮;即可将动画信息序列化到StreamingAssets文件夹下。至此,该编辑器脚本就不再使用(如果以后需要序列化其他的动画,还是要用的)。

然后将脚本DeserializeAnimationInfo拖拽到需要导出的游戏物体下。然后既可以将场景打包成exe进行测试。

打包完成之后,运行打包后的exe,按下键盘的“A”键就可以将指定模型导出到FBX文件。“S”键可以在运行时修改动画。

3.写在后面

这只是我做出来的一个实例场景,我做的肯定不够完善,脚本中很多地方都可以进行优化,大家可以根据自己的需求来修改。

主要的脚本就是ExporterFBX脚本,该脚本中我也都写了注释,大家可以看一下,进行修改;

比如在该脚本的ExportAll方法中,可以修改FBX文件导出保存的路径;以及需不需要导出动画信息,也都可以修改。希望这个文章能帮到大家。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
### 回答1: Unity可以通过FBX格式导出模型FBX是一种常用的3D模型格式,被广泛用于游戏开发和3D建模领域。使用Unity导出FBX可以方便地将模型在不同的软件和平台之间进行交互和共享。 要导出模型FBX,首先需要在Unity中选择要导出模型对象。可以在场景中选择一个或多个模型对象,也可以在资源管理器中选中模型文件。然后,在Inspector视图中,找到模型导入设置,将其选项展开。 在模型导入设置中,可以进行不同的配置。例如,可以选择导出模型的哪些部分(如网格、动画、材质等),是否带有动画、骨骼绑定信息等。还可以调整导出FBX文件的单位(米、厘米、毫米等)和旋转轴。 完成设置后,点击导出按钮,选择导出的文件路径和文件名,确认导出操作。Unity会将选中的模型模型文件导出为一个或多个FBX文件。导出FBX文件可以在其他3D建模软件(如Maya、3ds Max)中打开和编辑,也可以在其他游戏引擎或平台中使用。 需要注意的是,导出模型可能会丢失部分细节或属性,因为不同软件之间的兼容性可能存在差异。在进行模型导出之前,建议先进行一些兼容性测试,以确保导出FBX文件能在其他软件和平台上正确显示和使用。 总之,Unity支持通过FBX格式导出模型,这为游戏开发者和3D建模师提供了更大的灵活性和便利性。通过导出FBX,可以更好地在不同软件和平台之间进行模型交互和共享。 ### 回答2: Unity是一款流行的游戏引擎,它允许用户使用3D建模软件创建游戏对象。当我们在Unity中创建或导入一个3D模型后,我们可以将其导出FBX(Filmbox)格式,以便在其他应用程序中使用或与其他人分享。 将模型导出FBX格式有几个好处。首先,FBX是一种通用的文件格式,几乎可以在任何支持3D渲染的应用程序中导入和使用。这意味着我们可以在其他建模软件中打开和编辑导出模型,或者在其他游戏引擎中使用它。因此,将模型导出FBX可以使我们的工作流程更加灵活和高效。 其次,FBX格式支持多种属性和功能,如纹理映射、骨骼动画、蒙皮权重等。这些属性和功能在游戏开发和动画制作中非常常见,因此,将模型导出FBX可以确保这些特性的保留。不仅如此,FBX格式还支持多边形和NURBS等多种几何体类型,因此我们可以选择适合我们需求的几何体类型来导出模型。 在Unity中,将模型导出FBX非常简单。我们只需选择要导出模型文件,右键点击并选择“导出”选项,然后选择FBX格式并指定保存路径。在导出选项中,我们还可以选择导出模型的具体属性和功能,确保导出后的模型能够满足我们的要求。 总而言之,将模型导出FBX格式是Unity中常见的操作。它使我们能够方便地在其他应用程序中使用和编辑模型,并确保导出模型能够保留所需的属性和功能。这使得我们的游戏开发和动画制作工作更加灵活和高效。 ### 回答3: Unity是一款强大的游戏开发引擎,它支持多种模型导出格式,其中包括FBXFBX是一种通用的3D模型文件格式,可以在不同的软件中导入和导出。在 Unity 中将模型导出FBX格式,可以使其更容易与其他3D建模软件进行兼容和使用。 在Unity导出模型FBX格式非常简单。首先,将模型导入到Unity中。在Unity编辑器中选择所需模型,在Inspector面板中找到“Rig”或“Asset”选项,然后选择“模型”并打开其Rig模块。 然后在Rig模块中,选择“Animation Type”。这里有三个选项可供选择:None、Generic和Humanoid。如果你的模型没有动画,选择“None”即可。如果你的模型有动画,并且你想在Unity中使用它们,选择“Generic”。如果你的模型是以人形结构构建的,并且你想将其与Mecanim系统一起使用,选择“Humanoid”。 接下来,在导航栏中选择“文件”>“导出”>“FBX”,然后选择导出的文件路径和文件名。在导出窗口中,你可以选择导出FBX所需的选项,如包含动画、网格剖分和材质等。如果你只想导出模型(没有材质和动画),你可以选择相应的选项。 最后,点击“导出”按钮。Unity将使用所选的选项将模型导出FBX文件。导出FBX文件可以在其他3D建模软件中导入和编辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值