作者:Adam Tuliper 微軟技術傳道者
作為一名軟體架構師,我寫過很多系統、反向工程本機程式惡意軟體,並且通常會搞清楚語言方面的事情。 但是當說起製作遊戲,我還有點搞不清楚從哪裡開始講起。 我曾早期在 Windows 工作時,做了一些本機程式圖形程式設計,但那不是什麼有趣的經歷。 後來我開始專研 DirectX 開發,我發現,雖然它非常強大,但我要做的事似乎需要寫很多程式。
有一天,我決定嘗試使用 Unity,我也看到了它確實可以做一些令人驚訝的事情。 這篇文章在四部分系列當中作為首篇,內容囊括了 Unity 的基礎及架構方面的知識。 我將展示如何創建 2D 和 3D 遊戲,最後演示如何發佈到 Windows 平臺。
Unity 是什麼
Unity 是一個 2D/3D 引擎,為您提供設計 2D、2.5D 和 3D 遊戲或各種應用的系統。 我之所以說是遊戲和應用程式,是因為我看到的不只有遊戲,還有訓練模擬、即時反應的應用程式,以及需要與 2D/3D 空間互動的產品為核心的應用程式。 Unity 憑藉的不僅有程式,還有視覺化元件,讓您能夠與它們進行互動,並將它們匯出到各個主要的移動平臺,其中很多都是免費的。 (還有一個專業版非常不錯,但它不是免費的。 您可以使用免費版本來實現大部分功能。)Unity 支援所有主要的 3D 應用程式和多種音訊格式,它甚至能讀取 Photoshop 的 .PSD 格式,以便您能將 .psd 檔導入到一個 Unity 專案中。 Unity 允許您導入和組裝資源,編寫程式與物件進行互動,創建或導入動畫以便在動畫系統中使用等等。
如圖 1 所示,Unity 已完成了跨平臺支援的工作,理論上您可以按一下來切換平臺,但通常還需要做少量工作,比如整合商店和金流。
圖 1 Unity 支援的平臺
也許 Unity 最強大的部分在於“Unity Asset Store資源商店”,它可以說是在遊戲市場上最好的商店。 在這裡您可以找到所有遊戲元件的需求,如 美術設定、3D 模型、動畫檔(商店內的 Mixamo 套件有超過 10,000 個動畫)、音訊效果和音樂、外掛程式(包括那些可以提供多平臺支援的套件)、視覺化腳本系統(如 PlayMaker 和 Behave)、先進的著色器、貼圖、粒子特效等等。 Unity 介面是完全腳本化的,允許很多協力廠商外掛程式通過適當的整合加入到 Unity GUI 中。 就算不是全部的開發者,至少也是大多數的開發者會使用資源商店中的套件,如果您有不錯的作品,也可以將它發佈在那裡。
人們對 Unity 的誤解
我猶豫要如何解釋Unity 並不像人們質疑的那樣。 然而,預設情況下 Unity 並不是一個用來製作 2D 和 3D 模型(地形除外)的系統。 您可以把一堆僵屍角色帶入到場景中,控制他們走來走去,但你不能在 Unity 中畫一隻僵屍。從這個意義上來說,Unity 並非類似於 Autodesk Maya 或 3DSMax、Blender 甚至 Adobe Photoshop 那樣的開發工具。 但有一個協力廠商建模外掛程式 (ProBuilder) 是可以讓你在 Unity 內創建一些 3D 元件模型,也有 2D 環境產生器(用於建立 2D 環境的地形編輯器),你還可以在 Unity 中設計地形,使用地形工具建立樹木、草地、高山等令人歎為觀止的景觀。 所以我猶豫該如何指出 Unity 的一些局限。
Microsoft 如何融入進來? Microsoft 與 Unity 的緊密合作能夠確保整個 Microsoft 可以得到平臺的強大支持。 Unity 支持 Windows 的獨立可執行性、Windows Phone,Windows 應用商店應用程式、Xbox 360 和 Xbox One。
開始使用
下載 Unity 的最新版本,準備好一個有滾輪的滑鼠。官網下載是一個共用於免費版和專業版的安裝檔。 您可從這裡 unity3d.com/unity/licenses 查看兩種版本之間的區別。 編輯器是主要的 Unity 介面,它執行在 Windows(包括 Surface Pro)、Linux 和 OS X 上。
接下來我將在文章中介紹使用 Unity 做遊戲開發,但首先,我將介紹 Unity 介面、專案結構和體系結構。
體系結構和編譯
Unity 是一個基於 C++ 的遊戲引擎。 使用 C#、JavaScript (UnityScript) 或較少使用的 Boo 編寫程式。 您的程式,而不是 Unity 引擎程式會在 Mono 上或 Microsoft.NET Framework 上執行,這是即時 (JIT) 編譯的(iOS 除外,因為它不允許使用 JIT 代碼,並且它是由 Mono 使用預先 [AOT] 編譯將其編譯到平台代碼)。
Unity 讓您能夠在 IDE 中測試遊戲,而無需執行任何種類的匯出。 當您在 Unity 4.x 中執行程式時,您使用的是 Mono 的 3.5 版本,它的 API 相容性基本上與 .NET Framework 3.5/CLR 2.0 的 API 相當。
在專案視圖中按兩下腳本檔,可以打開預設的編輯器 MonoDevelop,這樣就可以在 Unity 中編輯您的程式了。 如果您願意,您可以用 Visual Studio 作為您的編輯器。
使用 MonoDevelop 進行調整或使用 Visual Studio、UnityVS 的協力廠商外掛程式。 在沒有 UnityVS 的情況下,您不能直接用 Visual Studio ,因為當您執行遊戲時,您不是在執行 Unity.exe,而是透過使用一個發出命令並執行相關操作的軟體調試器在執行 Unity 內部的虛擬環境。
若要進行調試,就需要從 Unity 啟動 MonoDevelop。 MonoDevelop 有一個外掛程式,您在 MonoDevelop 中調試 | 附加到進程之後,這個外掛程式可以打開返回到 Unity 調試器的連接,並向其發出命令。 UnityVS 使您能夠將 Visual Studio 調試器連接回 Unity。
當您第一次打開 Unity 時,您會看到如圖 2 中所示的項目對話方塊。
圖 2 Unity 專案精靈
在專案對話方塊中,您為您的專案 (1) 指定了名稱和位置。可以將任何套件加入專案 (2) 中,這裡你不必全選,列表僅為方便使用而提供,事後都可以匯入。套裝程式是一個包含預先打包的資源(模型、程式、場景、插件,可在 Unity 中打包的一切)的 .unitypackage 檔,且您可以重複使用或分發它們。
如果你不知道這些是什麼,就不要在此處打勾,隨著你的專案規模變大會影響大小。 最後,您可以選擇 2D 或 3D (3)。 這個下拉清單是 Unity 新的項目,之前並沒有強大的 2D 遊戲工具,直到最近才出現。 當設定 3D 時,預設會是3D專案的環境。當選 2D 時,Unity 改變了一些看似小,但很重要的設定,我將在本系列的後續 2D 文章中對此進行介紹。
此清單的內容來自您系統上的 .unitypackage 文件,Unity 提供了一些內容。 您從 Unity 資產商店下載的內容也會作為 .unitypackage 檔而出現,存在你的系統 C:\Users\<you>\AppData\Roaming\Unity\Asset Store 中。 因此當它存在你電腦上時,就會顯示在這個清單中。 您可以簡單地按兩下匯入一個 .unitypackage 檔。
按一下圖 2 中的對話方塊中的“Creat”開始,建立一個新的專案。 預設的 Unity 窗口如圖 3 所示。
圖 3 預設的 Unity 窗口
您可以看到:
1. Project:專案中的所有檔案。可以透過從檔案總管拖放到 Unity中來加入你的專案。
2. Scene:當前打開的場景。
3. Hierarchy:場景中的物件,我們用 GameObjects 和 GameObjects 下拉式功能表來稱呼。
4. Inspector:場景中選定物件的元件(屬性)。
5. Toolbar:最左邊是平移、移動、旋轉、縮放,中央是播放、暫停、前進。 按一下“播放”可立即播放遊戲,而不必另外編譯。 “暫停”可暫停遊戲,“前進”一次執行一幀,為您提供非常札實的調整控制。
6. Console:此視窗可以隱藏,但它顯示你的編譯、錯誤、警告紀錄等。 也會顯示程式的資訊;例如,Debug.Log 會在此處顯示它的輸出。
值得一提的是,“Game”介面在“Scene”介面旁。當按下“播放”時,遊戲介面會啟動並開始在這個視窗中執行。這就是所謂的播放模式,它提供一個測試遊戲的環境,也可以切換回“Scene”介面即時修改遊戲。但要非常小心,當你處於播放模式時,針對場景的修改在離開播放模式後會還原。 我和許多 Unity 的開發人員聊過,大家都曾因為這樣而工作被還原,所以我在播放模式下,從Edit/Preferences/Colors)更改了Playmode tint的顏色來讓我不會出錯。
關於場景
遊戲中的一切都存在於一個場景中。當針對平臺發佈遊戲時,產生的是一個或多個場景的集合,包括增加的平臺程式。在一個專案中你可以有多個場景。一個場景可以看作是遊戲中的一個關卡,但你在一個場景檔中可以有多個關卡,只要將玩家/鏡頭移動到場景中不同的地點即可。當您下載第三方套件或從資產商店下載範例時,通常你必須在專案中找出場景檔。場景檔是一個單體檔案,它包含各種關於專案中需要用到的資源中繼資料及屬性。 和其他工具一樣,在開發過程中常按下 Ctrl+S 來存檔。
雖然 Unity 有時在打開一個專案時,預設會是一個新的空場景,這時你必須在專案介面中找出場景檔,但通常Unity 會打開最後操作的那個場景。這讓新手感到很困惑,如果你想知道所完成的工作都去了哪裡,放輕鬆!記住這一點很重要!透過按一下圖 4 中顯示的圖示對場景進行篩選,您可以找出專案中的所有場景。
圖 4 篩選專案中的場景
場景中如果沒有鏡頭就看不到任何東西,如果沒有任何 GameObject 有Audio Listener元件,就什麼都聽不到。 但還好在新的場景中,Unity 總是會建立一個鏡頭,上面已經有Audio Listener元件了。
專案結構和導入資產
Unity 專案和 Visual Studio 專案不同。 你不用打開專案或ssl文件,因為沒有那種東西。Unity 所在的資料結構為專案。 專案資料夾中包含“Assets”、“Library”、“ProjectSettings”和“Temp”資料夾,但顯示在介面中的只有“Assets”資料夾,如圖 4 所示。
“Assets”包含您所有的資產(美術、程式、音訊),你專案中的每一個檔都放在這裡。這是 Unity 編輯器中的頂層資料夾。 只能在 Unity 介面中進行更改,決不能通過檔案總管。
“Library”是匯入資源的本地暫存;它為資源保留所有中繼資料。 “ProjectSettings”儲存你透過“Edit/Project Settings”的設定。 “Temp”用於產生過程中來自 Mono 和 Unity 的暫存檔案。
我想強調的是只通過 Unity 介面(而不是直接通過檔案總管)進行更改的重要性。 甚至包括簡單的複製和貼上。 Unity 透過編輯器追蹤物件中繼資料,所以使用編輯器來進行更改(幾個附加案例之外)。 你可以從檔案總管拖放到 Unity,這種效果很好。
至關重要的 GameObject
場景中所有的一切實際上都是 GameObject。 思考 .NET Framework 中的 System.Object。幾乎所有類型都是從它派生出來的。 同樣的概念也適用於 GameObject。 它是 Unity 場景中的所有物件的基礎。圖 5 中顯示所有(以及更多)物件都是從 GameObject 中派生出來的。
圖 5 Unity 中的 GameObjects
GameObject 非常簡單能從“Inspector”介面看到屬性。可以在圖 6 中看到一個空的 GameObject 已被加入場景中,請注意它在檢查器中的屬性。GameObject 在預設情況下沒有可視屬性,當你選擇物件時只會顯示小圖示。 代表它只是一個空物件。
圖 6 簡單的 GameObject
GameObject 有一個“名稱”、一個“標籤”(類似於您透過 XAML 中的 FrameworkElement.Tag 的文本標籤或在 Windows 表單中的標籤)、一個“Layer層”和“Transform”(可能是最重要的屬性)。
“Transform”(轉換)屬性是 GameObject 的位置、旋轉以及縮放的資訊。 Unity 使用左手坐標系,因此可以將螢幕的座標視為 X(水平)、Y(垂直)和 Z(深度,也就是進出螢幕的方向)。
在遊戲開發中,使用向量座標非常普遍,我在後面的文章會詳細介紹。 就目前而言,知道 Transform.Position 和 Transform.Scale 都是 Vector3 的物件就可以了。 Vector3 是一個簡單的三維向量,換句話說,它就是三個點:X、Y 和 Z。 透過使用這三個值,您可以定義一個物件位置,甚至沿著某個方向移動一個物件。
組件Components
您可以透過增加元件,對 GameObjects 增加功能。 您所加入的元件都會顯示在“Inspector”介面中。 有 MeshRender 和 SpriteRender 組件,音訊和相機功能組件,物理相關的元件(碰撞體和剛體)、粒子系統、路徑查找系統、第三方廠商組件等。可以使用程腳本件將程式分配給物件。通過增加功能,元件能夠為您的 GameObjects 帶來勃勃生機,類似於軟體發展中的裝飾器模式,甚至比這更好。
我會將一些程式指定給新的 GameObject,在這種情況下,您可以透過“GameObject/Create Other/Cube”方式建立一個簡單的方塊。我把這個方塊命名為“Enemy”,然後又創建了另外一個,這下就有兩個方塊了。在圖 7 中我將一個方塊移動和另一個方塊距離 15 個單位,這只需要在選擇物件後,使用工具列的移動工具或 W 鍵就能夠做到。
圖 7 包含兩個方塊的專案
裡面是一個簡單的程式,會找到玩家並朝它移動。 以下兩種方法都可以執行移動操作,改變 Transform.Position 屬性每一幀都移動到一個新位置,或者可以對該物件施予一個物理力量, Unity 會執行其餘的工作。
每一幀都做些處理和“移動到這一點”相比,在思路上有些不同。在這個範例中,我打算每一幀都對物件移動一點點,所以我對移動到什麼地方可以有精確的控制。如果您不想每一幀都做調整,那麼有些插件可以執行單個函式呼叫移動操作,比如免費開放的 iTween 套件。
我做的第一件事就是在“專案”視窗中用滑鼠按右鍵,建立名為 EnemyAI 的一個新 C# 腳本。 若要將此腳本分配給對象,只需將檔案拖到場景或層次中的物件即可,程式就會應用到物件。剩下的 Unity 會處理。 就是這麼簡單。
圖 8 顯示已分配有腳本的 Enemy 方塊。
圖 8 已分配有腳本的 Enemy
查看圖 9 中的程式,並注意全域變數。在編輯器中,你可以看到我的全域變數出現時,有一個選項可以取代預設值。這代表你可以在介面中更改預設值,這裡也可以顯示許多不同物件類型的全域變數(而非屬性)。 如果我拖放此腳本到另一個 GameObject,則該腳本元件會獨立產生另外實體。這是個基本的示範,它可以更多功能,比方說增加一個 RigidBody 元件到這個物件,但現在我會將它保持簡單的樣子。
圖 9 EnemyAI 腳本
public class EnemyAI : MonoBehavior
{
// 這些值將出現在編輯器中,而完整的屬性則不會出現。
public float Speed = 50;
private Transform _playerTransform;
private Transform _ myTransform;
// 在分配到的 GameObject 啟動時調用。
void Start()
{
// 查找某個tag為“Player”的 gameobject。
// 這是啟動代碼,不應該每一幀都查詢該玩家 。
// 存儲對它的引用。
var player = GameObject.FindGameObjectWithTag("Player");
if (!player)
{
Debug.LogError(
"Could not find the main player. Ensure it has the player tag set.");
}
else
{
// 獲得對其變換的引用,以備後用(將託管
// 程式保存到本機)。
_playerTransform = player.transform;
}
// 獲得對我們的變換的引用,以備後用。
_myTransform = this.transform;
}
// 調用每一幀。 每一秒鐘的畫面播放速率都在變化。
void Update()
{
// 設定應該以每秒多快的速度移向"Player"
//在 Unity 中,單位是米。
// Time.deltaTime 給出距離最後一幀的時間量。
// 如果您正在以 60 FPS(每秒幀數)的速率運行,那麼就是 1/60 = 0.0167,
// 所以當 Speed=2,畫面播放速率是 60 FPS(畫面播放速率
// 每秒都在變化)時,我得到的移動量是 2*0.0167 = .033 個單位/每幀。這是 2 個單位。
var moveAmount = Speed * Time.deltaTime;
// 更新位置,根據 moveAmount 移向玩家的位置。
_myTransform.position = Vector3.MoveTowards(_myTransform.position,
_playerTransform.position, moveAmount);
}
}
在程式中,我可以取得編輯器中顯示的任何元件的引用。 我也可以為 GameObject 分配腳本,每一個都有它自己的啟動和更新方法(以及許多其他方法)。 假設包含此程式的腳本元件需要引用 EnemyAI (元件),我可以簡單地查詢該元件:
public class EnemyHealth : MonoBehavior
private EnemyAI _enemyAI;
// 用來初始化。
void Start () {
// 獲取對這個遊戲物件上的 EnemyAI 腳本元件的引用。
var enemyAI = this.GetComponent<EnemyAI>();
}
// 每幀調用一次更新。
void Update () {
_enemyAI.MoveTowardsPlayer();
}
當您在 MonoDevelop 或自訂的程式編輯器中編輯好程式並切換回 Unity 之後,通常會有一個短暫的延遲。這是因為 Unity 正在編譯你的代碼。您可以通過“Edit/Preferences/External Tools/External Script Editor”來修改您的程式編輯器(而不是除錯器)。任何編譯問題都將出現在您的 Unity 編輯器螢幕的最下方狀態列,所以請留意。如果您嘗試執行的程式中存在錯誤的話,Unity 不會讓你繼續。
編寫程式
在先前的程式範例中,有兩種方法,“Start”和“Update”,而且類 EnemyHealth 是從 MonoBehavior 基類繼承而來的,通過使用基類,您可以簡單地將 EnemyHealth 類分配給一個 GameObject 物件。在基類中有很多可用的功能,並且通常還有很多方法和屬性。主要的方法就是,如果它們存在於您的類中,Unity 將進行呼叫。也有少數方法可以呼叫(請參閱 bit.ly/1jeA3UM)。雖然類似於 ASP.NET Web 表單頁面生命週期,有很多方法,但通常只能使用幾個。以下是在類中最常見的可執行的編碼方法,這些方法涉及到 MonoBehavior 派生類事件的序列:
Awake:當物件第一次進行初始化時,每個物件呼叫一次此方法。其它元件可能還沒有被初始化,所以這種方法通常用來初始化當前的 GameObject。您應該始終使用這個方法來初始化 MonoBehavior 派生類,而不是某個構造函數。不要在此試圖在場景中查詢其他物件,因為它們可能還沒有初始化。
Start:在物件生命週期的第一幀中,並且在使用任何“Update”方法之前呼叫。這非常類似 Awake,但使用 Start法代表其他物件已通過 Awake 初始化並且存在於您的場景中,因此,您可以在代碼中輕鬆查詢其他物件,如下:
// 返回在任何遊戲對象上找到的第一個 EnemyAI 腳本元件實例。
// 這種類型是 EnemyAI(一個元件),而不是一個 GameObject。
var enemyAI = GameObject.FindObjectOfType<EnemyAI>();
// 實際上,我將獲得對其頂層 GameObject 的引用。
var enemyGameObject = enemyAI.gameObject;
// 想知道 Enemy 的位置嗎?
var position = enemyGameObject.transform.position;
Update:每一幀都會呼叫。如果你想問更新的頻率?它是可調整的,完全取決於計算。為了呈現不同物件的原因,系統總是不斷變化著承載,所以這個畫面播放速率每秒都會變化。進入播放模式查看當前的畫面播放速率時,您可以按下“Game”介面中的“Stats”按鈕,如圖 10 所示。
圖 10 獲取統計資訊
FixedUpdate:一秒鐘內會以固定次數呼叫此方法,和畫面播放速率無關。因為一秒鐘內呼叫“Update”的次數是變動的,且不與物理引擎同步,所以當您想為某個物件提供一個力道或其他一些物理相關的函數時,最好的方法是使用 FixedUpdate。預設情況下,FixedUpdate 每 0.02 秒被呼叫一次,這代表 Unity 也在每 0.02 秒執行一次物理計算(這時間間隔稱為“Fixed Timestep”,並可讓開發者調整),同樣與畫面播放速率無關。
Unity 產生的程式項目
一旦您的專案中放入了程式,Unity 就會在您的根資料夾中創建一個或多個專案檔案(這在 Unity 介面中看不見)。這些並非 Unity 引擎的二進位檔案,而是 Visual Studio 或 MonoDevelop 的專案,你可以在其中編輯和編譯程式。Unity 可以建立很多個看似獨立的項目,如圖 11 所示,雖然每一個都有著重要的用途。
圖 11 Unity 建立的專案
如果 Unity 專案很單純就不會有這些檔案。它們只有在將程式放入各種特定的資料夾之後才會產生。圖 11 中顯示的專案是只按照三種類型剖視的剖視圖:
· Assembly-CSharp.csproj
· Assembly-CSharp-Editor.csproj
· Assembly-CSharp-firstpass.csproj
對於這些專案而言,重複專案都會附加 -VS,例如 Assembly-CSharp-vs.csproj。如果 Visual Studio 是你的編輯器,就會使用這些項目,並且會將它們從 Unity 加到匯出的專案中,用於在 Visual Studio 解決方案中針對特定平臺除錯。
其他專案服務目的相同,但會使用 UnityScript 來取代 CSharp。這些只是專案的 JavaScript (UnityScript) 版本, 當您在 Unity 遊戲中使用 JavaScript 並且將腳本放在這些專案的資料夾中才會存在這些版本。
我們來探討觸發這些項目的資料夾,並告訴您它們的用途。 每個資料夾路徑都假設它在專案視圖中的 /Assets 資料夾下。Assets 始終是根資料夾,其中包含您的所有資產檔。例如,Standard Assets 實際上是 /Assets/Standard Assets。您的腳本的產生過程通過四個階段來產生程式集。第 1 階段編譯的物件看不到第 2 階段編譯的物件,因為它們還沒有被編譯。當您將 UnityScript 和 C# 都放入同一個專案時,必須要瞭解這一點。如果您想引用來自 UnityScript 的 C# 類,您需要確保在初期階段中對其進行編譯。
第 1 階段由“Standard Assets”、“Pro Standard Assets”和“Plug-ins”資料夾中的執行腳本組成,它們全部位於 /Assets 下。這一階段創建 Assembly-CSharp-firstpass.csproj 項目。
第 2 階段的腳本位於 Standard Assets/Editor、Pro Standard Assets/Editor 和 Plug-ins/Editor 資料夾中。最後一個資料夾是為與提供設計時功能的 Unity 編輯器 API 進行互動的腳本二準備(考慮 Visual Studio 外掛程式及其如何如何增強 GUI,而且僅有它在 Unity 編輯器中運行)。這一階段創建 Assembly-CSharp-Editor-firstpass.csproj 項目。
第 3 階段包括不在“Editor”資料夾內的所有其他腳本。這一階段創建 Assembly-CSharp-Editor.csproj 項目。
第 4 階段包括所有剩下的腳本(所有其他稱為“Editor”的資料夾中的腳本,如 /Assets/Editor 或 /Assets/Foo/Editor)。這一階段創建 Assembly-CSharp.csproj 項目。
也有一些這裡沒有涉及到的其他幾個不常用的資料夾,如“Resources”。還有就是關於編譯器所使用內容方面的未決問題。是 .NET 嗎?是 Mono 嗎?是用於 Windows 運行時 (WinRT) 的 .NET 嗎?是用於 Windows Phone 運行時的 .NET 嗎?圖 12 列出了用於編譯的預設值。知道這一點非常重要,特別是對基於 WinRT 的應用程式,因為每個平臺可用的 API 會有所不同。
圖 12 編譯變體
當你執行 Windows 匯出時,Unity 負責進行呼叫,以從您的 C#/UnityScript/Boo 程式 (DLL) 產生遊戲庫,並包括本機的執行庫。針對 Windows 商店和 Windows Phone 8,它會匯出 Visual Studio 方案,獨立 Windows standalone 除外,因為 Unity 會生成 .exe 和所需的 .dll 文件。關於平臺發佈議題,我將在本系列的最後一篇文章中討論各種產生類型。較低級別的圖形繪製由 Windows 平臺上的 DirectX 執行。
在 Unity 中設計遊戲是一個相當簡單的過程:
· 匯入物件(美術、音訊等)。使用Asset Store。或自己做Asset。找個美術。 Unity 支援 Maya、Cheetah3d、Blender 和 3dsMax ,特定格式會要求你安裝繪圖軟體,同時可以使用 obj 和 .fbx 這些常見的檔案格式。
· 使用 C#、JavaScript/UnityScript 或 Boo 編寫程式,控制你的物件、場景以及實現遊戲邏輯。
· 在 Unity 中進行測試並匯出到平臺。
· 在平臺上進行測試並發佈。
等等!我還想知道更多!
本文是對 Unity 中的體系結構和過程的概述。我介紹了介面、分配程式的基礎知識、GameObjects、組件、Mono 和 .NET 等。這使我們能夠更好的為下一篇文章做好準備,在下一篇文章中我將深入探討 2D 遊戲的遊戲元件組裝。請關注 Microsoft 虛擬學院,我會在夏末進行一個為期兩天的 Unity 學習活動。請訪問unity3d.com/pages/windows/events 留意本地區的學習活動。