Unity3D零基礎入門(一)


0. 目錄

  1. 簡要介紹
  2. 基本概念
  3. 視圖菜單
  4. 坐標系統
  5. 資源元素
  6. 腳本交互
  7. 相機操作

 

1. 簡要介紹

Unity3D軟件是由Unity Technologies公司提供的綜合開發環境,主要面向游戲開發人員、虛擬現實設計師等,可用於創建諸如三維視頻游戲、建築可視化、實時三維動畫等類型的多媒體內容,並支持這些內容在Windows、iOS、Android等多種平台的發布,功能非常強大。

Unity3D軟件分為Free版和Pro版,前者在功能上要弱於后者(比如前者不支持LOD等,具體區別參見這里),對於后者還提供全功能的30天試用版。目前Unity3D軟件的最新版本是4.3.2,下載地址在這里

Unity3D軟件集成了專業的渲染引擎和“所見即所得”的開發編輯界面,可快速創建具有強大視聽效果的交互式3D內容,並支持3ds max、maya等多種三維建模軟件所制作的物件模型(以資源形式導入並使用)。腳本編程基於Mono技術,可使用JavaScript、C#或Boo語言編寫,用來對基於可視化編輯界面的基礎開發方式進行功能擴展。

 

2. 基本概念

熟悉Unity3D使用的基本概念和術語,對於理解后文內容非常重要。以下術語在后文中將會反復出現。

  • 工程(Project)表示單個開發項目,包含項目中所有的元素,如模型、腳本、關卡等。如果需要開發一個游戲,那么這個游戲在Unity3D軟件中以單個工程的形式存在並進行管理。
  • 場景(Scene)每個工程包含一個或多個場景。通常而言單個場景作為一個游戲關卡或游戲主菜單,在其中放置環境、裝飾、敵人等游戲對象
  • 游戲對象(GameObject)構建游戲的基礎單元,通過在特定場景中進行交互來完成游戲過程。游戲對象是組件(Component)的容器,單個游戲對象通常包含多於一個組件,同時也可以包含其他游戲對象作為其子對象。每個游戲對象至少包含Transform組件。
  • 組件(Component)構建游戲對象的基礎單元,為游戲對象添加特定的功能。組件可以是網格、材料、地形等可視化實體,也可以是攝像機、燈光等抽象類型。組件必須依附於游戲對象而存在。
  • 資源(Asset)表示材質、紋理、音頻文件、游戲對象等在開發過程中可使用的資源。
  • 預制件(Prefab)游戲對象和組件的集合,可以在場景中被復用。適用於大量重復使用的物體(相當於為這些重復物體創建一個模板)。將預制件放置在場景中,即對其進行了實例化。修改預制件的屬性將影響它的所有實例,而修改其單個實例的屬性將僅影響該實例。預制件以藍色字體顯示。
  • 腳本(Script):定義了場景中的資源和游戲對象如何進行交互,是游戲業務邏輯的實現。腳本也是一種組件。
  • 相機(Camera):相機是附帶了相機組件的游戲對象。玩家在屏幕上所看到的一切均是通過相機視角來展示的。
  • 燈光(Light):絕大多數情況下均需將燈光添加到場景中。燈光可以為場景渲染出不同的氣氛。

舉例說明,假設我們需要開發一款類似於《暗黑破壞神2》的游戲,那么開發團隊將為該游戲創建一個工程,並在該工程中進行各種資源的管理和邏輯腳本的編寫。玩家為了升級和獲取裝備,需要到地牢去打怪。如果地牢有三層,那么每一層都可以作為一個場景,各場景間通過地道進行切換。在每一層地牢場景中的地形、怪物、裝備、血瓶、水池等元素都是游戲對象,這些游戲對象由於包含了不同的組件而具備不同的功能。比如怪物對象可以包含音頻組件,在被殺死時能發出對應的慘叫聲。

游戲中所有的三維模型(包括怪物模型、地牢模型等)、音頻文件、圖片文件等都可以看作是資源。如果某一類怪物數量較多,我們可以考慮把它作成預制件資源,直接在場景中實例化多份即可,這樣一旦怪物屬性發生了變化,僅需要修改一次。怪物的尋路與搏斗等業務邏輯適合放在腳本中實現,從而讓它們真正地智能化,並與玩家角色進行交互,推動游戲情節展開。相機是玩家在游戲中的眼睛,向玩家展示游戲世界。該游戲中的相機需要跟隨玩家角色而移動,方便玩家時刻觀察自己角色的狀態。

 

3. 視圖菜單

運行Unity3D軟件,如果是第一次使用則需要創建新的工程並導入開發所需的package,否則可直接打開原有工程。注意:工程路徑中不能包含中文,否則會提示“Creating file Temp/tempFile failed...”並且無法創建成功。

進入Unity3D后,軟件界面如下圖所示:

以下分別介紹軟件界面各組成部分的功能:

  • 工程瀏覽面板(Project):用於訪問、管理和查找工程中所使用的資源(Asset)。面板左側有Favorites和Assets兩個分支,其中Assets分支為所有資源的樹狀層級列表,類似於Windows資源管理器,而Favorites分支可存放經常訪問的資源以及某次資源查找的結果,類似於收藏夾。面板右側是以圖標(或列表)形式顯示的資源集合,其右上方放大鏡圖標所標識的輸入框為資源查找框,可輸入資源名稱、類型和標簽進行查找。
  • 層級面板(Hierarchy):列出當前場景視圖中的所有游戲對象(GameObject)。一旦游戲對象在場景視圖中被添加或刪除,在層級視圖中也將同步更新。層級視圖提供游戲對象的父子關系設置,子對象繼承父對象的運動和旋轉效果。
  • 場景視圖(Scene):用於選擇和放置當前場景所包含的各類游戲對象,包括環境、玩家、敵人、攝像機等,這是開發過程中最重要的環節之一。可通過鼠標或快捷鍵進行場景的觀察視角變換與導航。視圖右上角是場景手柄工具(Scene Gizmo),顯示了場景視圖當前視角方向,可通過它快速修改視角。
  • 工具欄(Toolbar):包括5個呈水平方向排列的工具條,從左至右分別用於導航/空間變換、場景顯示切換、游戲視圖控制、游戲對象顯示與視圖布局。
  • 屬性監視面板(Inspector)顯示當前選中游戲對象的詳細信息,包括它所附帶的組件(Component)及其屬性。屬性監視面板中列出的任何屬性均可以被直接修改,從而改變該游戲對象的功能和特性。

軟件界面的最上方是主菜單,包括如下菜單項:

  • 文件(File):用於場景和工程的新建/打開/保存,以及工程構建。
  • 編輯(Edit):用於基本操作和設置。
  • 資源(Assets):用於資源的導入/導出/創建/顯示。
  • 游戲對象(GameObject):用於游戲對象的創建/顯示/移動/父子關系設置。
  • 組件(Component):用於各類組件的設置。
  • 窗口(Window):用於窗口的切換,以及各類窗口的顯示。
  • 幫助(Help):提供關於信息、參考手冊、腳本手冊、論壇信息等。

 

4. 坐標系統

坐標系統在Unity3D開發過程中具有非常重要的作用,是游戲對象定位、移動、縮放、旋轉等操作的基礎。坐標系統包含以下基本概念:

  • 三維向量(Vector3):用於表示三維坐標空間的向量和點,可進行向量運算。
  • 世界坐標(World Space):相對於整個世界空間建立坐標系,使用全局坐標(通過Transform.position獲取)。其X軸正方向指向屏幕右側,Y軸正方向背離觀察者,Z軸正方向指向屏幕上方。
  • 視口坐標(ViewPort Space):坐標點被歸一化,並且相對於相機建立坐標系。以相機左下角為(0,0)點,右上角為(1,1)點,Z軸使用相機的世界坐標單位。其X軸正方向指向屏幕右側,Y軸正方向指向屏幕上方,Z軸正方向指向觀察者。
  • 屏幕坐標(Screen Space):坐標點使用像素點進行定義,並且相對於屏幕建立坐標系。以屏幕左下角為(0,0)點,右上角為(pixelWidth,pixelHeight)點,Z軸使用相機的世界坐標單位。其各軸方向與視口坐標相同。屏幕坐標的本質是激活的視口坐標(相機有多個,每個相機有自己的視口坐標,屏幕對應於被激活相機的視口,因此屏幕坐標是被激活相機的視口坐標)。鼠標位置坐標屬於屏幕坐標。
  • 局部坐標(Local Space):使用所選擇對象的坐標系統。一個對象的局部坐標來自它的樞軸點(Pivot Point),坐標原點即該對象的樞軸點(對象的局部中心),坐標方向與樞軸點方向相同。可以在層級面板中調整一個對象的局部坐標位置和方向。

 

5. 資源元素

網格、材質、紋理、貼圖和動畫是資源模型中非常重要的元素,直接決定了資源在場景中的外觀和行為表現。

  • 網格(Mesh):是一種將物體模型的頂點、紋理、材質等信息存儲在一個外部文件中的3D物體模型。
  • 材質(Material):物體表面最基礎的材料,如木質、塑料、金屬或者玻璃等。
  • 紋理(Texture):物體表面呈現的線形紋路,是在材質基礎上的豐富細節呈現。
  • 貼圖(Map):一種將圖片信息投影到曲面的方法。

Unity3D沒有創建網格的工具,但是可以在常用的三維建模軟件(如Maya、3ds Max等)中創建模型,然后導入到Unity3D中形成資源,這些資源可以被場景直接使用。

Unity3D支持讀取fbx、dae、3ds、dxf和obj格式的文件,因此所有可以導出這些格式的軟件都適用於Unity3D。

 

6. 腳本交互

Unity3D腳本支持JavaScript、C#與Boo(.Net平台中與Python語法相似的一種靜態語言),官方推薦使用JavaScript,但考慮到C#的面向對象支持程度與強大的類庫,在大型游戲項目開發時建議使用C#。

前文提到過,腳本也是組件的一種,可以掛載到游戲對象中。游戲框架在腳本生命周期的流程節點處或特定事件發生時調用相應方法,實現游戲業務邏輯。因此,腳本開發最為重要的是明確其生命周期的關鍵流程環節,這些流程環節所關聯的腳本方法和它們的執行時機,從而在合適的腳本方法中編寫所需的業務邏輯代碼。

下圖描述了腳本生命周期的腳本方法調用流程與時機。

 

圖中內容可簡化為這樣的方法執行次序:Awake --> Start --> Update --> FixedUpdate --> LateUpdate --> OnGUI --> Reset -->  OnDestory

  • Awake:用於在游戲開始之前初始化變量或游戲狀態,在腳本整個生命周期內僅被執行一次。Awake在所有游戲對象初始化之后執行,因此可以在方法中安全地與游戲對象進行通信。
  • Start:僅在所有腳本的Update方法第一次被調用前執行,且僅在腳本實例被啟用時執行。Start在所有腳本的Awake方法全部執行完成后才執行。
  • Update:在每次渲染新的一幀時執行。由於該方法調用的頻率與設備性能、被渲染對象有關,導致同一游戲在不同機器的效果不一致(因為Update方法的執行時間間隔不一致)。
  • FixedUpdate在固定的時間間隔執行,不受游戲幀率的影響。所以處理RigidBody時最好用FixedUpdate。FixedUpdate的時間間隔可在工程設置中更改(Edit --> Project Setting --> Time)。
  • LateUpdate:所有腳本的Update方法調用后執行。例如相機跟隨即是在LateUpdate方法中實現。
  • OnGUI:在渲染和處理GUI事件時執行。
  • Reset:用戶點擊屬性監視面板(Inspector)的Reset按鈕或首次添加該組件時執行,僅在編輯模式下執行。
  • OnDestroy:當游戲對象將被銷毀時執行。

需要注意的是,必須所有腳本的Awake方法均執行完畢后才會開始執行這些腳本中的Start方法,而各腳本的Awake方法的調用順序是隨機的。因此,對象的創建可在Awake方法中實現,而對象的獲取可在Start方法中實現,保證調用先后次序。

 

7. 相機操作

相機是為玩家捕捉和顯示世界的一種裝置。在一個場景中你可以有數量不限的相機,它們可以被設置為任何順序渲染,在屏幕上的任何地方渲染,或僅渲染屏幕的一部分。

相機可以被定制,被腳本化,或被子類化。對於益智游戲,相機通常處於靜態顯示全部視角。對於第一人稱射擊游戲,相機通常作為玩家角色的子對象,並將其放置在與玩家角色的眼睛等高的水平。對於賽車游戲,相機通常會跟隨玩家角色所控制的車輛。


免責聲明!

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



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