版权声明:本文为博主原创文章,遵循 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文件)的更多相关文章

  1. 关于用Max导出Unity3D使用的FBX文件流程注解

    原地址:http://hi.baidu.com/phpstyle/item/c167a4c0694670b10d0a7b87 关于用Max导出Unity3D使用的FBX文件流程注解(转载) (2011 ...

  2. 用Max导出Unity3D使用的FBX文件流程注解(转载)

    http://www.cnblogs.com/wantnon/p/4564522.html 从max导出FBX到Unity,以下环节需要特别注意.1,单位设置   很多人在建模,动画的时候,默认的ma ...

  3. 【Unity】3.3 用3ds Max 2015制作模型并将其导入到Unity

    分类:Unity.C#.VS2015 创建日期:2016-04-05 一.常用三维软件简介 由于游戏引擎本身的建模功能相对较弱,无论是专业性还是自由度都无法同专业的三维软件相比,所以大多数游戏中的模型 ...

  4. 3ds Max光照纹理导入Unity的教程.

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...

  5. 【Unity】3.4 将现有的3ds Max模型导入到Unity

    分类:Unity.C#.VS2015 创建日期:2016-04-05 一.简介 这一节我们用一个带有"装子弹和上膛"动画的"枪"模型,介绍在3ds Max 20 ...

  6. 3ds Max从入门到精通

    1. 软件的下载与安装 这里用的是3ds Max2009简体中文版 32位 在 Win7上运行记得打上sp2补丁,不然会有bug. 2. 3ds Max的历史 3ds Max可以用在动画和游戏,点云数 ...

  7. 3ds max学习笔记(六)-- 基本操作(建模前奏)

    1.界面设置 在3ds Max的版本的界面中,默认是较深.若需要切换至较亮的界面,步骤: 执行“自定义”菜单,选择“加载自定义用户界面方案”从弹出的界面中选择样式文件,单击“打开”即可: 注:“amg ...

  8. 3ds Max导出FBX动画模型在OSG中使用

    3ds Max做好动画模型 导出选项:包含-动画-附加选项-勾选使用场景名(这样动画名就是场景名)高级选项-单位-勾选自动(否则导出的模型很小) 导出文件名假设a.fbx使用osgconv工具旋转坐标 ...

  9. 摄像机内参相关(3ds max)

    一般的原理参考:http://ksimek.github.io/2012/08/13/introduction/ 对于3ds max建模时使用的target camera,如果想得到它的内外参,可以利 ...

随机推荐

  1. ubuntu安装cairo

    查看网上大神们的各种安装经过,最后google之后执行下面两句就搞定了:apt-get install python-cairo      apt-get install libcairo2

  2. CCNA基础学习

    OSI七层模型 由国际标准化组织ISO于1984年提出 是目前公认的计算机通信和Internet网络通信的基本结构模型 如见使用的最广泛的TCP/IP协议就是基于OSI(Open Systems In ...

  3. Shell命令-用户用户组管理之id、su

    文件及内容处理 - id.su 1. id:查看用户的uid,gid及归属的用户组 id命令的功能说明 id 命令用于显示用户的 ID,以及所属群组的 ID.id 会显示用户以及所属群组的实际与有效I ...

  4. 密度峰值聚类算法MATLAB程序

    密度峰值聚类算法MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 密度峰值聚类算法简介见:[转] 密度峰值聚类算法(DPC) 数据见:MATL ...

  5. 初学Python几个小程序练习

    使用格式化输出的三种方式实现以下输出(name换成自己的名字,既得修改身高体重,不要厚颜无耻) name = 'ABDMLBM' height = 175 weight = 140 # "M ...

  6. fiddler设置https抓包

    代理端口设置:127.0.0.1:8888 https抓包设置 模拟post请求: http://xxx.xxxx.com/portal/login.htm Cookie: xxxx account= ...

  7. 《Verilog数字系统设计教程(第2版).pdf》

    Verilog数字系统设计教程(第2版).pdf https://github.com/shigh1005/pdf_book <Linux设备驱动开发详解:基于最新的Linux 4.0内核.pd ...

  8. 移动端(手机端)页面自适应解决方案1(rem布局)---750设计稿

    设计稿尺寸为750 * 1340.结合网易.淘宝移动端首页html元素上的动态font-size属性.设计稿尺寸.前端与设计之间协作流程一般分为下面两种: 网易做法: 页面开头处引入下面这段代码,用于 ...

  9. opencv读取USB相机select timeout问题

    现象: 树莓派4b或3b+   插着两个USB免驱相机 摄像头朝着灯就会报 time out 摄像头不朝着灯就不报 问题: 功率不够 朝着灯可能触发了USB相机的曝光补偿导致功率变大 解决: 使用带额 ...

  10. map 基本使用

    package main import "fmt" func main(){ //定义一个map变量,类型为map[int]string,如果使用map一定初始化,make分配空间 ...