2014年9月30日 星期二

使用 Unity 和 C# 開發您的第一款遊戲(MSDN轉譯)


2014-09-29 MSDN Unity官方平臺
作者: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 相當。

在專案視圖中按兩下腳本檔,可以打開預設的編輯器 Mono­Develop,這樣就可以在 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 留意本地區的學習活動。

沒有留言:

張貼留言

著作人