從MAYA建模到Unity漫遊的詳細教程_bysking算法
1、MAYA建模部分(maya版本:windows 2018版 (64-bit))windows
咱們的思路是創建一樓各個房間及樓梯而後不斷的向上複製出整個樓棟框架
1.首先咱們要拿到模型的俯視圖瞭解大體的佈局:編輯器
創建一樓的地板,原理:新建一個立方體再創建另一個立方體讓它們相交,按住ctrl鍵選中其中一個再加選另一個而後使用maya的布爾運算工具,在設置裏面選擇舊版算法,做差集利用此原理獲得以下效果:ide
預計效果圖以下:函數
元素類型有如下的幾種:房間分爲三種類型教室(有桌子椅子講臺黑板),會議室(有桌子椅子會議桌櫃子)和左下角的小房子,因此咱們分別把這些元素建出來而後拼裝在一塊兒。工具
--桌子(倒角工具+立方體的組裝+貼圖)佈局
--椅子ui
椅子模型,限於篇幅,不作講解,簡單說來就是,繪製曲線,繪製圓環曲線,同時選中,使用曲面擠出工具就能夠作出彎曲的框架,還可使用倒角工具美化模型棱角。this
--會議桌(擠出+倒角+貼圖)
--櫃子(布爾差工具+貼圖)
--講臺(立方體的面的擠出以及倒角就能夠實現,再貼圖)
--黑板(倒角+貼圖)
--房間框架
新建一個立方體,利用布爾工具摳去鏤空,獲得房間的框架,這裏要注意使用的是舊版算法,
(帶窗戶的房間框架)
用立方體組裝一個窗戶並賦予玻璃材,用立方體組裝一個窗戶並賦予玻璃材質。
選中房間框架模型進行uv展開,烘焙UV成TGA格式的圖像文件,使用ps工具繪製貼圖,再從新貼回模型(導入部分有詳細教程)
--樓梯
好了,基本元素作完以後咱們就開始組裝最基本的兩間房間:教室以及會議室,並把他們打組命名,並居中樞軸,清除構建歷史,最核心的基本元素就作好了。
而後在咱們根據衛星地圖構建的地板上再次組裝出咱們的一樓:
加上樓頂,總體打組,命名好比:floor1(一樓),選中這個組,居中樞軸,清除歷史:
剩下的工做十分簡單,能夠在maya裏面總體複製五份堆出五層樓,可是在Unity裏面還須要進行添加碰撞,因此咱們選擇去unity裏面,爲一層樓添加碰撞後再複製,節省工做時間,因而這棟樓就算完成了。
(能夠看一下複製五層的效果:
)
而後是中間的大廳部分,也是很簡單,幾何體,不斷運用布爾差工具,拼裝。
大廳:
大廳頂:
大廳樓梯和臺階:
牆壁就是簡單幾何體,壓縮後拼裝,就像搭積木同樣,再貼圖,玻璃門那裏有給玻璃材質:
玻璃門的建模和上面的窗戶建模一個原理。
最後是右邊的大樓和左邊大樓的建模是一樣的原理:
咱們只須要作出一層就好:
看一下五層的效果:
看一下總體效果(注意,unity使用模型的時候,只須要導入兩棟樓的一樓便可):
2、導入部分(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項目-把文件夾一塊兒拖到unity的assets資源文件夾下,在再拖到項目裏面就能夠了。
--方式二(mb文件):這種方式直接拖就行,紋理被置入mb文件,會自動貼紋理,不過會花費一點時間,如今的unity版本支持對maya導出文件的mb格式進行直接解析。
3、Unity實現漫遊部分
好了如今咱們Unity就有了帶材質的模型.在實現漫遊以前還須要對模型添加碰撞
爲了快速進項漫遊講解,先使用未貼圖的模型:
選中地面,點擊右邊的add Component,有兩種選擇,地板的話,能夠選第一個box Collider,房間框架的話就選mesh Collider,就這樣爲每個一樓的物件都添加碰撞(能夠批量選擇,總體添加碰撞)
而後就是添加第一人稱控制器:在Assests目錄下右鍵導入須要的控制器包
依次展開以下目錄:
拖動到世界裏面,調整大小,而且調整到合適的位置
點擊三角形,運行發現能夠wasd四個按鍵來控制鏡頭移動,鼠標來控制視角方向。
由於咱們要作兩個主場景,一個是第一人稱,一個是第三人稱,固然加上開始界面,一共有三個場景,更改當前場景名字爲first,再新建兩個場景third和start
進入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腳本的空對象拖給它
而後找到咱們建立的退出函數
最後就是可能須要調節一下光照的位置
至此項目的全部流程編寫完畢。
截圖: