1. 程式人生 > >我的Unity 3D之旅——Hello World(2)

我的Unity 3D之旅——Hello World(2)

二、除錯程式

完成了上一節的內容,我們的第一個Unity程式已經可以運行了。但是遊戲開發遠沒有這麼容易,出現點錯誤什麼的是非常正常的。除錯,對於定位和解決程式出現的各種問題是非常重要的。下面介紹在Unity中常用的兩種除錯方法:

1. 顯示Log。在Unity編輯器下方有一個Console視窗,用於顯示控制檯資訊,如果程式出現錯誤,這裡會用紅色的字型顯示出錯誤的位置和原因(和Eclipse相似)。當然我們也可以在程式中新增程式碼來顯示Log資訊:

        Debug.Log("A Common Log");
        Debug.LogWarning("A Warning Log");
        Debug.LogError("An Error Log");

執行程式,當執行到上述程式碼時,在控制檯會顯示出相應的Log資訊。而根據呼叫的函式不同,從上而下依次是訊息級別、警告級別和錯誤級別的Log。

右擊Console視窗,選擇【Open Editor Log】會開啟編輯器的Log文件。這個Log文件記錄了Unity從最近一次啟動開始的所有日誌資訊。一個比較實用的功能是,當我們將遊戲編譯完成以後,在這個Log文件中會顯示出遊戲的資源分配情況。舉個栗子:

2. 設定斷點。當使用Visual Studio 2015 Community作為Unity的指令碼編輯器時,可以在程式碼中需要的地方設定斷點,然後在工具欄中選擇【Attach to Unity】,vs會自動生成並連結到Unity。回到Unity中運行遊戲,當指令碼執行到斷點時遊戲就會自動暫停,這時就可以在vs裡檢視除錯資訊,具體的除錯操作與除錯

普通的C#專案完全相同,不再贅述。

三、Unity基本模組

介紹完程式的除錯,接下來簡單介紹一下Unity中的幾個基本模組。在此只作最簡單的介紹,具體在以後使用到時再作詳細說明。

1. 光照。光影效果是3D遊戲中非常重要的組成部分,下面進行介紹。

(1) 光源。Unity一共提供了4種光源,包括Directional Light(平行光)、Point Light(點光源)、Spotlight(聚光燈)和Area Light(區域光)。不同光源的區別主要體現為照明範圍的不同:

Directional Light如同太陽光,光線會從一個方向照亮整個場景。在Forward Rendering模式下,僅這一種光源可以顯示實時陰影。

Point Light就像燈泡,從一個點向周圍發射光線並逐漸衰減。

Spotlight像是舞臺上的聚光燈,光束按某一方向照射並且限制在一定的範圍內。

Area Light通過一個矩形範圍向一個方向發射光線,只能被用來烘焙Lightmap。

(2) 環境光與霧。環境光可以認為是Unity提供的一種特殊光源,它會整體地改變場景的亮度而沒有方向和範圍的概念。環境光在場景中是始終存在的。關於環境光和霧效,在選單欄【Window】→【Lighting】中可以進行設定。([注]:霧效對效能會造成一定影響,在硬體效能較差時應當慎用)

(3) LightMapping技術。當遊戲場景中包含大量多邊形時,實時光源和陰影的計算對遊戲效能的影響會很大。這時更適合的方案是使用Lightmapping技術——將光線效果預渲染成貼圖使用到多邊形上來模擬光影效果。使用這種方式可以不用擔心光源數量和陰影造成的效能開銷而獲得高質量的光影效果。最新版本的Unity使用了全新的Enlighten系統,提供了Precomputed Realtime GI Lighting和Baked GI Lighting技術,Unity社群有相關文章詳細說明了這些。

(4) Light Probe(燈光探測器)。Lightmapping技術可以解決靜態場景的光影問題,但是它無法和場景中的動態模型互動,使得運動中的模型不能和場景中的光線融合到一起從而顯得不真實。Light Probe可以解決這個問題。通過在場景中擺放不同的Probe對場景各處的光影資訊進行取樣,場景中運動的模型就能夠參考這些Probe的位置模擬出與靜態場景類似的光影效果。

2. 地形。Terrain是Unity提供的一個地形系統,主要用來表現龐大的室外地形,特別適合表現自然環境。

3. 天空。在Unity中,可以使用Skybox技術來表現天空的效果。

4. 粒子。Unity中的粒子功能非常強大,它可以用來表現遊戲中的魔法、雲、煙火和其他特殊效果。

5. 物理。Unity內部集成了NVIDIA PhysX物理引擎,可以用來模擬剛體運動、布料等物理效果,也包括射線、觸發器等功能。Unity的物理模擬還可以分層,可以指定只有某些Layer(層)中的物體才會發生指定的物理效果。

6. Shader(著色器)。Shader是3D遊戲中的重要組成部分,它能夠對3D物件表面的紋理和特性進行處理,表現出各種材質效果。Unity提供了豐富的內建Shader,同時也支援自定義Shader。Shader提供了各種材質屬性,支援CG語言。

7. 動畫系統。Unity4.0引入了全新的Mecanim動畫系統,使用狀態機系統來控制動畫邏輯,提供了更強大的功能。

四、小結

Hello World部分到此就告一段落了。在這一部分中,首先簡單地介紹了一下Unity,然後通過一個“Hello World”程式來了解使用Unity開發遊戲的環境和流程,之後介紹了常用的除錯方法,最後簡單介紹了光照、地形、天空、粒子、物理、著色器、動畫等各個模組。

這一部分是入門部分,是使用Unity開發遊戲的基礎,同樣也是我本人踏上Unity之旅的第一步,對於Unity的各個模組只是進行了最簡單的理解而沒有深入。本部分的目的在於初步瞭解Unity,熟悉Unity編輯器的佈局與命令以及使用Unity開發遊戲的基本操作。在之後的旅途中,將會伴隨著實戰一步步深入瞭解Unity的各個模組。