(转)Unity与3ds Max的单位关系(使用FBX文件)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1780531/article/details/90933558
游戏引擎通常并不具备专业的建模功能,所以通常情况下模型都是在专业的三维软件中进行设计,然后再通过特定格式的文件导入到游戏引擎中进行游戏开发。Unity支持多种外部导入的模型格式,如FBX、3ds、dxf和obj等。
本文中介绍的FBX文件是Autodesk公司出品的一款用于跨平台的免费三维创作与交换格式的软件,通过FBX用户能访问大多数三维供应商的三维文件。FBX文件支持所有主要的三维数据元素以及二维、音频和视频媒体元素,是当今主流的文件格式。通过在3ds Max中将模型导出为FBX格式文件,再将文件导入到Unity中,就能够对模型进行进一步的游戏设计。在导出导入FBX文件的过程中不少用户会发现模型的尺寸会发生变化,“明明在3ds Max中的设计尺寸为1米,导入到Unity却扩大了一百倍”。究其原因,是因为二者单位转换的问题,弄明白二者之间的关系,就能节省很多开发时间。本文中采用Unity2018.3.0与3ds Max2012进行示范演示。
第一种情形:
(1)在3ds Max2012中将系统单位设置“1单位 = 1m”,如图1所示。(设置系统单位的方式:在菜单栏中选择“自定义”-“单位设置”-“系统单位设置”)
图1 系统单位设置
(2)在编辑区创建一个边长为2米的正方体,如图2所示。

图2 边长为2米的正方体
(3)点击3ds Max左上角的图标,选择“导出”-“导出”,命名为“testCube.FBX”,这样一个最基础的FBX文件就创建完成。
(4)将FBX文件导入到Unity场景中。在Unity项目中新建文件夹,命名为“Prefab”,将上一步生成的FBX文件放置到该文件夹下,并将模型拖至场景中,为了后续便于区分,给该正方体添加黄色材质。如图3所示。

(5)为了验证3ds Max与Unity之间模型的尺寸关系,我们需要知道Unity中模型的实际尺寸。Unity中默认单位为米。通过以下脚本获取模型的尺寸
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class GetSize : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Vector3 theSize = GetObjectSize();
print(theSize);
} // Update is called once per frame Vector3 GetObjectSize()
{
Vector3 realSize = Vector3.zero;
Mesh mesh = GetComponent<MeshFilter>().mesh;
if(mesh == null)
{
return realSize;
}
Vector3 meshSize = mesh.bounds.size;
Vector3 scale = transform.lossyScale;
realSize = new Vector3(meshSize.x * scale.x, meshSize.y * scale.y, meshSize.z * scale.z);
return realSize;
}
}
将脚本挂载到测试正方体中,运行程序,在控制台输出窗口就会显示尺寸,如图4所示。

图4 控制台输出尺寸
可以看出模型在Unity中的尺寸为2m x 2m x 2m,与我们在3ds Max中的尺寸一致,并且注意到图3右侧Inspector面板中Transform一栏中的Scale的三个值全为1。
第二种情形
(1)将第一种情形中3ds Max中的系统单位设置为"1单位=1cm",同样绘制边长为2m的正方体。在导出FBX文件时仍然选择场景单位转化为“米”,注意到此时比例因子变成0.01,如图5所示。
图5 设置场景单位
(2)将导出的FBX文件导入到Unity场景中,如图6中红色立方体所示。通过脚本获取立方体尺寸大小。

从图中可以看出,立方体的尺寸依旧为2m x 2m x 2m,但是Inspector面板中Transform一栏中的Scale的三个值全为0.01。这也就可以看出,因为在3ds Max导出设置时比例因子为0.01,这也就使得Scale变为0.01。
第三种情形
(1)3ds Max中的系统单位设置为"1单位=1m",同样绘制边长为2m的立方体。在导出FBX文件时仍然选择场景单位转化为“厘米”,注意到此时比例因子变成100,如图7所示。
(2)将导出的FBX文件导入到Unity场景中,如图8中浅蓝色立方体所示。通过脚本获取立方体尺寸大小,物体尺寸仍为2m x 2m x 2m。但是Inspector面板中Transform一栏中的Scale的三个值全为100。这也就可以看出,因为在3ds Max导出设置时比例因子为100,这也就使得Scale变为100。
第四种情形
(1)在Unity的project面板单击第三种情形中创建的正方体,会在相应位置显示该模型的Inspector面板,可以注意到Convert Units属性是默认选中的,我们现在取消选中,如图8所示。

(2)再将该立方体拖放到场景中,会发现立方体会扩大很多倍,使用脚本获取尺寸,大小为200m x 200m x 200m,如图10所示。

为什么会发生这种情况呢? 因为我们在3ds Max模型的单位为米,而导出设置时场景单位为厘米,这样模型大小就可以表示为200厘米 x 200厘米 x 200厘米。因为在默认条件下,Convert Units选项是被选中的,而且选项中有指出"1 cm(File) to 0.01m(Unity)",这样最终转到Unity中就是2米 x 2米 x 2米,可以理解为“带单位转换”。但是如果取消Convert Units选项,Unity就不会识别FBX文件中模型的单位是多少,而只是默认识别为200单位 x 200单位 x 200单位 。之前讲过Unity中默认的单位为"1单位=1米",这样导入到场景中就会变成200米 x 200米 x 200米,“可以理解为不带单位转换”。
总结
经过上述几个情形的举例,我们已经能够大致了解Unity与3ds Max之间的单位关系。3ds Max中的比例因子参数就是对应了Unity的Transform中的Scale属性。而场景单位就是对应于Unity中的单位,为与Unity单位一致,场景单位最好设置为米。将模型导入到Unity之后要注意观察其Convert Units选项,通常情况下,为了保证3ds Max与Unity中的模型尺寸一致,需要将该选项选中。
(转)Unity与3ds Max的单位关系(使用FBX文件)的更多相关文章
- 关于用Max导出Unity3D使用的FBX文件流程注解
原地址:http://hi.baidu.com/phpstyle/item/c167a4c0694670b10d0a7b87 关于用Max导出Unity3D使用的FBX文件流程注解(转载) (2011 ...
- 用Max导出Unity3D使用的FBX文件流程注解(转载)
http://www.cnblogs.com/wantnon/p/4564522.html 从max导出FBX到Unity,以下环节需要特别注意.1,单位设置 很多人在建模,动画的时候,默认的ma ...
- 【Unity】3.3 用3ds Max 2015制作模型并将其导入到Unity
分类:Unity.C#.VS2015 创建日期:2016-04-05 一.常用三维软件简介 由于游戏引擎本身的建模功能相对较弱,无论是专业性还是自由度都无法同专业的三维软件相比,所以大多数游戏中的模型 ...
- 3ds Max光照纹理导入Unity的教程.
原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...
- 【Unity】3.4 将现有的3ds Max模型导入到Unity
分类:Unity.C#.VS2015 创建日期:2016-04-05 一.简介 这一节我们用一个带有"装子弹和上膛"动画的"枪"模型,介绍在3ds Max 20 ...
- 3ds Max从入门到精通
1. 软件的下载与安装 这里用的是3ds Max2009简体中文版 32位 在 Win7上运行记得打上sp2补丁,不然会有bug. 2. 3ds Max的历史 3ds Max可以用在动画和游戏,点云数 ...
- 3ds max学习笔记(六)-- 基本操作(建模前奏)
1.界面设置 在3ds Max的版本的界面中,默认是较深.若需要切换至较亮的界面,步骤: 执行“自定义”菜单,选择“加载自定义用户界面方案”从弹出的界面中选择样式文件,单击“打开”即可: 注:“amg ...
- 3ds Max导出FBX动画模型在OSG中使用
3ds Max做好动画模型 导出选项:包含-动画-附加选项-勾选使用场景名(这样动画名就是场景名)高级选项-单位-勾选自动(否则导出的模型很小) 导出文件名假设a.fbx使用osgconv工具旋转坐标 ...
- 摄像机内参相关(3ds max)
一般的原理参考:http://ksimek.github.io/2012/08/13/introduction/ 对于3ds max建模时使用的target camera,如果想得到它的内外参,可以利 ...
随机推荐
- React教程:4 个 useState Hook 示例
摘要: React示例教程. 原文:快速了解 React Hooks 原理 译者:前端小智 到 React 16.8 目前为止,如果编写函数组件,然后遇到需要添加状态的情况,咱们就必须将组件转换为类组 ...
- docker 简单介绍与安装
主机虚拟化(vmware,visual box等) type-Ⅰ type=Ⅱ 主机虚拟化是隔离最彻底的,但是由于多隔了一个虚拟的操作系统,性能会慢一些. 容器虚拟化(docker等) 隔离没有主机虚 ...
- 5-1可视化库Seabon-整体布局风格设置
In [1]: import seaborn as sns import numpy as np import matplotlib as mpl import matplotlib.pyplot a ...
- CUDA -- 规约求矩阵的行和
求矩阵每行的和? 可以把每行放入一个不同线程块,这样行与行之间进行粗粒度的并行.而对于每行,其对应的线程块中分配n个线程(对应行宽),使用共享存储器,让每个线程从显存中读取一个数至shared mem ...
- selenium截取元素
http://www.mamicode.com/info-detail-2161474.html 常见问题 https://blog.csdn.net/u010616442/article/detai ...
- (转)深入浅出JWT(JSON Web token)
转载地址:https://www.cnblogs.com/mantoudev/p/8994341.html 参考地址:https://baijiahao.baidu.com/s?id=16080218 ...
- Java基本数据类型转换一
public class TestConvert { /**容量小的类型自动转化为容量大的类型数据类型按容量大小排列 * byte,short,char -> int ->long-> ...
- 二分法查找(C语言)
二分法是一种高效的查找方法,其适用于已经排好序的数组 基本思路 从数组最中间的数开始查找判断,若不是需要查找的数字,则比较大小,之后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推 算法描述 ...
- CF-weekly4 F. Kyoya and Colored Balls
https://codeforces.com/gym/253910/problem/F F. Kyoya and Colored Balls time limit per test 2 seconds ...
- Token认证,如何快速方便获取用户信息
背景 我们有一个Web项目,这个项目提供了很多的Rest API.也做了权限控制,访问API的请求必须要带上事先认证后获取的Token才可以. 认证的话就在Filter中进行的,会获取请求的Token ...