從MAYA建模到Unity漫游的詳細教程 bysking


MAYA建模Unity漫游的詳細教程_bysking

 

 

 

一、MAYA建模部分(maya版本:windows 2018版 (64-bit))

 

我們的思路是建立一樓各個房間及樓梯然后不斷的向上復制出整個樓棟

 

1.首先我們要拿到模型的俯視圖了解大致的布局:

 

 

建立一樓的地板,原理:新建一個立方體再建立另外一個立方體讓它們相交,按住ctrl鍵選中其中一個再加選另外一個然后使用maya的布爾運算工具,在設置里面選擇舊版算法,作差集利用此原理得到如下效果:

 

 

 

預計效果圖如下:

 

 

元素類型有以下的幾種:房間分為三種類型教室(有桌子椅子講台黑板),會議室(有桌子椅子會議桌櫃子)和左下角的小房子,所以我們分別把這些元素建出來然后拼裝在一起。

--桌子(倒角工具+立方體的組裝+貼圖)

 

 

--椅子

椅子模型,限於篇幅,不做講解,簡單說來就是,繪制曲線,繪制圓環曲線,同時選中,使用曲面擠出工具就可以做出彎曲的框架,還可以使用倒角工具美化模型棱角。

 

 

 

 

--會議桌(擠出+倒角+貼圖)

 

 

--櫃子(布爾差工具+貼圖)

 

 

--講台(立方體的面的擠出以及倒角就可以實現,再貼圖)

 

 

--黑板(倒角+貼圖)

 

--房間框架

新建一個立方體,利用布爾工具摳去鏤空,得到房間的框架,這里要注意使用的是舊版算法,

 

 

 

(帶窗戶的房間框架)

用立方體組裝一個窗戶並賦予玻璃材,用立方體組裝一個窗戶並賦予玻璃材質。

選中房間框架模型進行uv展開,烘焙UVTGA格式的圖像文件,使用ps工具繪制貼圖,再重新貼回模型(導入部分有詳細教程)

 

 

--樓梯

 

 

 

好了,基本元素做完之后我們就開始組裝最基本的兩間房間:教室以及會議室,並把他們打組命名,並居中樞軸,清除構建歷史,最核心的基本元素就做好了。

 

 

 

 

然后在我們根據衛星地圖構建的地板上再次組裝出我們的一樓:

 

 

加上樓頂,整體打組,命名比如:floor1(一樓),選中這個組,居中樞軸,清除歷史:

 

 

剩下的工作十分簡單,可以在maya里面整體復制五份堆出五層樓,但是在Unity里面還需要進行添加碰撞,所以我們選擇去unity里面,為一層樓添加碰撞后再復制,節省工作時間,於是這棟樓就算完成了。

 

 

(可以看一下復制五層的效果:

然后是中間的大廳部分,也是很簡單,幾何體,不斷運用布爾差工具,拼裝。

 

大廳:

 

 

大廳頂:

 

大廳樓梯和台階:

 

 

 

牆壁就是簡單幾何體,壓縮后拼裝,就像搭積木一樣,再貼圖,玻璃門那里有給玻璃材質:

 

玻璃門的建模和上面的窗戶建模一個原理。

 

最后是右邊的大樓和左邊大樓的建模是同樣的原理:

我們只需要做出一層就好:

 

 

看一下五層的效果:

 

 

看一下整體效果(注意,unity使用模型的時候,只需要導入兩棟樓的一樓即可):

 

 

 

二、導入部分(Unity版本:Windows Unity 2018.1.0f2 (64-bit))以及貼圖教程

導入部分需要注意的問題就是貼圖:下面我們進行舉個小例子進行兩種方式導入嘗試

(1)建模:創建一個多邊形:

 

 

ctrl+d復制一份,r鍵進行調整縮小如圖:

 

 

 

作布爾運算:

 

 

確保舊版算法(方便uv展開)

 

 

 

 

得到如下結構:

 

 

同理,再新建多邊形,做出窗戶:

 

 

布爾運算后:

 

 

選中多邊形,進入uv編輯器:

 

 

先確保以對象級別選中左側物體,點擊uv編輯器里面的創建,一般規則物體選擇自動就行

 

 

 

 

uv被自動展開,放在長寬為1單位的正方形內,每一塊uv殼可以直觀理解為和多邊形的某一個面相對應

 

 

由於我們只需要做牆外面的貼圖,所以只關心外邊的四個面,所以全選uv,

 

 

重新縫合這些uv

 

 

在左邊多邊形上,按住鼠標右鍵不放,拖動到面級別,按住shift+鼠標左鍵依次點擊我們關注的四個牆壁外面,在uv編輯器里面,點擊自動展開:

 

 

 

 

 

把我們關注的uv殼和其他不關注的分離,保證關注的部分所占的比例最大,充分利用1*1的面積。

 

 

再點擊保存uv快照。

 

 

選擇存放的位置以及文件名記住。

 

 

 

點擊應用並關閉:

 

 

 

如果無法保存是因為沒選擇左邊的對象,鼠標移動到左邊,切換到對象級別並選擇物體,再點擊應用並關閉即可。這樣就在我們事先選擇的目錄下面就有了貼圖的文件。

 

 

 

接着就在剛下的目錄找到,我們的貼圖,選擇ps打開。

 

 

 

 

 

 

 

新建圖層並且在對應區域繪制,或者插入圖片

 

 

最后隱藏掉黑色的參考圖層

輸出為png圖片,用作最終的貼圖。

 

 

回到maya界面,點擊多邊形,創建新材質lambert

 

 

點擊小箭頭,切換到lambert屬性

 

 

 

 

 

點擊創建文件節點

 

 

點擊文件夾

 

 

打開貼圖文件:

 

 

 

 

打開渲染開關:

 

 

以上就是一個完整的繪制貼圖的教程。

 

我們保存為兩種格式,fbx,mb(導出時保留紋理,以及引用)文件

---方式一(fbx文件):

 

建立一個fbx文件夾把fbx模型和貼圖文件一起放進去,導入unity才能有貼圖

 

 

新建unity項目-把文件夾一起拖到unityassets資源文件夾下,在再拖到項目里面就可以了。

 

 

 

 

 

 

 

 

--方式二(mb文件):這種方式直接拖就行,紋理被置入mb文件,會自動貼紋理,不過會花費一點時間,現在的unity版本支持對maya導出文件的mb格式進行直接解析。

 

 

 

 

三、Unity實現漫游部分

好了現在我們Unity就有了帶材質的模型.在實現漫游之前還需要對模型添加碰撞

為了快速進項漫游講解,先使用未貼圖的模型:

 

 

 

選中地面,點擊右邊的add Component,有兩種選擇,地板的話,可以選第一個box Collider,房間框架的話就選mesh Collider,就這樣為每一個一樓的物件都添加碰撞(可以批量選擇,整體添加碰撞)

 

 

然后就是添加第一人稱控制器:在Assests目錄下右鍵導入需要的控制器包

 

 

 

依次展開如下目錄:

 

 

 

 

拖動到世界里面,調整大小,並且調整到合適的位置

 

 

 

點擊三角形,運行發現可以wasd四個按鍵來控制鏡頭移動,鼠標來控制視角方向。

 

 

因為我們要做兩個主場景,一個是第一人稱,一個是第三人稱,當然加上開始界面,一共有三個場景,更改當前場景名字為first,再新建兩個場景thirdstart

 

 

 

 

 

進入third場景,(可以在first場景里面把添加好碰撞的模型重新從世界里面拖回ASSETS目錄再導入third場景)導入添加好碰撞的模型,添加第三人稱控制器,拖到游戲場景里面

 

 

 

 

 

但是直接點擊運行是不可取的(我們可以控制角色,但是攝像機卻是固定的),我們還需要有后續的工作,即讓攝像機跟隨角色視角

於是我們新建腳本followby

 

 

雙擊腳本(我們事先安裝好vs或者其他unity支持的代碼編輯工具)

添加如下代碼並點擊保存:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class followby : MonoBehaviour {

 

    public float mouse_x;

    public float mouse_y;

    public float mouse_scroll;

    public GameObject player;

 

    void Start()

    {

 

        mouse_x = 0;

        mouse_y = 0;

        mouse_scroll = 0;

    }

 

    // Update is called once per frame

 

    void Update()

    {

        transform.LookAt(player.transform);

        mouse_scroll = Input.GetAxis("Mouse ScrollWheel");

 

        if (mouse_scroll != 0)

        {

            transform.Translate(new Vector3(0, 0, mouse_scroll * Time.deltaTime * 50f), Space.Self);

        }

        //  if (Input.GetMouseButton(1))

        //{

        mouse_x = Input.GetAxis("Mouse X");

        mouse_y = Input.GetAxis("Mouse Y");

        transform.RotateAround(player.transform.position, player.transform.up, mouse_x * Time.deltaTime * 50f);

        transform.RotateAround(player.transform.position, transform.right, -1 * mouse_y * Time.deltaTime * 50f);

 

        //  }

 

 

    }

}回到unity的third場景,把腳本托給攝像機,再點擊攝像機,展開屬性列表,把第三人稱控制器拖到對應位置:

 

 

攝像機和第三人稱控制器都有位置屬性,可以直接把攝像機的位置值改為第三人稱控制器的值,

 

 

調整可以看到人物,其實這個時候點擊運行就可以看到,攝像機能跟隨人物進行旋轉視角了,不過這還不夠,還差運動跟隨,於是再新建一個腳本follow_move

編輯如下代碼:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class follow_move : MonoBehaviour {

    public GameObject player;

    // Use this for initialization

    void Start()

    {

 

    }

 

    // Update is called once per frame

    void Update()

    {

        transform.position = player.transform.position;

    }

}

 

返回unity,我們新建立一個空對象,把follow_move腳本拖給它,再把第三人稱控制器作為對象拖給這個空對象的腳本作為參數:

 

 

 

 

然后最后一個步驟,把main camera拖到這個空對象下面作為它的子物體,

這樣就實現了攝像機的跟隨並且可以根據用戶的鼠標進行旋轉,推移鏡頭

最后一個就是實現頁面跳轉了,我們保存當前場景,進入start場景,新建腳本rotate

輸入以下代碼:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class rotate : MonoBehaviour {

 

// Use this for initialization

void Start () {

 

}

 

// Update is called once per frame

void Update () {

        transform.Rotate(Vector3.up, Time.deltaTime * 15, Space.World);

    }

}

 

再把這個腳本拖給我們的模型,這樣就實現了模型的自動旋轉,可點擊三角啟動運行,正常。

 

 

然后我們需要創建基本的UI元素,簡單的幾個按鈕:第一人稱漫游,第三人稱漫游,退出游戲

首先,新建一個pannel,然后在這個pannel下面添加三個按鈕:展開按鈕text屬性,修改為第一人稱漫游,第三人稱漫游,退出游戲

 

 

 

 

把按鈕拖放到中間

 

 

 

點擊運行:效果如下

 

 

 

然后接下來我們需要做最后的步驟 ,添加場景切換,即按鈕事件

新建場景加載腳本:load

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement;//增加命名空間

 

public class load : MonoBehaviour

{

 

    public void OnStartGame(string sceneName)

    {

        Application.LoadLevel(sceneName);

    }

}

 

回到unity場景,新建空對象,把這個腳本拖給它,

 

 

接着點擊第一人稱漫游按鈕,為其添加事件:

 

 

展開,選中我們自定義的方法

 

 

然后按鈕1就代表加載名字為first的場景,我們在對應位置輸入first

 

 

第二個按鈕也是同樣的原理:

 

 

 

 

最后還剩下一個退出按鈕,新建一個quit腳本

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class quit : MonoBehaviour {

 

    public void BtnQuit()

    {

 

#if UNITY_EDITOR

UnityEditor.EditorApplication.isPlaying = false;

#else

        Application.Quit();

#endif

    }

}

 

回到unity場景,把該quit腳本繼續拖給之前創建的空對象,再點擊退出按鈕,展開屬性,添加點擊事件,

 

再把帶有quit腳本的空對象拖給它

 

 

 

然后找到我們創建的退出函數

 

 

 

 

最后就是可能需要調節一下光照的位置

 

至此項目的所有流程編寫完畢。

 

 

截圖:

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM