天天看點

Unity與3ds Max的機關關系(使用FBX檔案)

  遊戲引擎通常并不具備專業的模組化功能,是以通常情況下模型都是在專業的三維軟體中進行設計,然後再通過特定格式的檔案導入到遊戲引擎中進行遊戲開發。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所示。(設定系統機關的方式:在菜單欄中選擇“自定義”-“機關設定”-“系統機關設定”)

Unity與3ds Max的機關關系(使用FBX檔案)

圖1 系統機關設定

  (2)在編輯區建立一個邊長為2米的正方體,如圖2所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖2 邊長為2米的正方體

  (3)點選3ds Max左上角的圖示,選擇“導出”-“導出”,命名為“testCube.FBX”,這樣一個最基礎的FBX檔案就建立完成。

  (4)将FBX檔案導入到Unity場景中。在Unity項目中建立檔案夾,命名為“Prefab”,将上一步生成的FBX檔案放置到該檔案夾下,并将模型拖至場景中,為了後續便于區分,給該正方體添加黃色材質。如圖3所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖3 将模型拖放到Unity場景中

  (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所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖4 控制台輸出尺寸

可以看出模型在Unity中的尺寸為2m x 2m x 2m,與我們在3ds Max中的尺寸一緻,并且注意到圖3右側Inspector面闆中Transform一欄中的Scale的三個值全為1。

  第二種情形

  (1)将第一種情形中3ds Max中的系統機關設定為"1機關=1cm",同樣繪制邊長為2m的正方體。在導出FBX檔案時仍然選擇場景機關轉化為“米”,注意到此時比例因子變成0.01,如圖5所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖5 設定場景機關

  (2)将導出的FBX檔案導入到Unity場景中,如圖6中紅色立方體所示。通過腳本擷取立方體尺寸大小。

Unity與3ds Max的機關關系(使用FBX檔案)

圖6 Unity中導入紅色正方體

從圖中可以看出,立方體的尺寸依舊為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所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖7 場景機關設定

  (2)将導出的FBX檔案導入到Unity場景中,如圖8中淺藍色立方體所示。通過腳本擷取立方體尺寸大小,物體尺寸仍為2m x 2m x 2m。但是Inspector面闆中Transform一欄中的Scale的三個值全為100。這也就可以看出,因為在3ds Max導出設定時比例因子為100,這也就使得Scale變為100。

Unity與3ds Max的機關關系(使用FBX檔案)

圖8 Unity中導入藍色正方體

  第四種情形

  (1)在Unity的project面闆單擊第三種情形中建立的正方體,會在相應位置顯示該模型的Inspector面闆,可以注意到Convert Units屬性是預設選中的,我們現在取消選中,如圖8所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖9 Convert Units屬性設定

  (2)再将該立方體拖放到場景中,會發現立方體會擴大很多倍,使用腳本擷取尺寸,大小為200m x 200m x 200m,如圖10所示。

Unity與3ds Max的機關關系(使用FBX檔案)

圖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中的模型尺寸一緻,需要将該選項選中。