版權聲明:本文為博主原創文章,遵循 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中的模型尺寸一致,需要將該選項選中。