Unity3d 引擎原理詳細介紹
體系結構
為了更好地理解遊戲的軟體架構和物件模型,它獲得更好的外觀僅有一名Unity3D的遊戲引擎和編輯器是非常有用的,它的主要原則。
Unity3D 引擎
Unity3D的是一個屢獲殊榮的工具,用於建立互動式3D應用程式在多個平臺.Unity3D由遊戲引擎和編輯器。該引擎包含的軟體元件,在遊戲的研究與開發中最常見的和經常性的任務。發動機所涵蓋的主題包括聲音,圖形,物理和網路功能。該引擎支援C#,Boo,和JavaScript指令碼程式設計。
另一個部分是Unity編輯,作為指令碼和其他元件,包含遊戲場景設定和遊戲的預覽視窗(見圖4)分層物件檢查專案面板的整合開發環境。它還配備了幾個多語言指令碼編輯器和一個獨特的預製裝配系統,將在後面解釋。
圖4:Unity3D編輯器
有幾個Unity的許可證。Unity基本功能有限的免費PC的MAC和Webdevelopment.Other的平臺或完整的功能集[15]需要購買額外的許可證。
雖然有很多免費軟體和專有的替代遊戲引擎,如虛幻引擎™或C4™引擎選擇了Unity的原因如下:
*它可以部署在Windows,Mac OSX,Web瀏覽器,Wii遊戲機,iPhone,iPad的,Android的,微軟Xbox 360和PlayStation 3。它甚至在未來計劃增加快閃記憶體和Linux部署。的的部署possbilities提供很多的可能性,使用的遊戲引擎或遊戲引擎貨幣化或進一步研究。
*Unity社群非常支援和引擎,以及編輯器是有據可查的。
*發動機是比較容易學習和工作,並通過提供所有的工具,快速原型和迭代以及快速的指令碼編譯支援快速軟體開發的想法。
*可能部署的iPhone,iPad和iPod touch的iOS基本許可證與其他廠商相比,相對低廉的價格。建立機甲和坦克使用Unity3.0,C#指令碼和MonoDevelop的IDE進行開發。你可以找到一個Unity教程附錄。
Unity3D的簡史
下列日期說明在2001年和2011年[16]之間的Unity引擎的演變。
◾2001年Unity技術在2001年開始開發自己的遊戲引擎。當時的主要誘因是建立遊戲,這些遊戲的基礎,並創造了良好的工具[1]。
◾2003年在2003年的公司,由此產生的引擎將是一個偉大的產品本身的。
◾2005年在2005年Unity1推出蘋果的WWDC的舞臺上。
◾2007Unity2.0在2007年推出,並增加了地形引擎,實時動態陰影和視訊播放等等。
◾2008年在2008年推出Unity的iPhone和卡通網路推出FusionFall,遊戲已經播放超過800萬人次。
◾2010年在2010年Unity3.0釋出了幾十個新功能,如資產管理和獸光照貼圖。
◾2011團結超過500萬的開發者和60萬網路播放器安裝。
遊戲架構
機甲和坦克的架構組成模組和Unity的場景架構。
主要模組
本節介紹了最重要的模組和子系統級別上他們的關係。遊戲的建築風格,是一個物件與資料capsules.The的下面的UML元件圖說明子系統及其關係網路。
遊戲邏輯
此模組管理當前玩家和AI配置倒計時timerand當前的遊戲狀態(暫停,等待網路回覆)。
AI(人工智慧(Artificial Intelligence) ,英文縮寫為AI)
AI模組包含背後的邏輯單元,組和球員AI.The單位的AI尋路或障礙物避免使用不同的轉向行為控制單元的狀態。組AI管理組的行為和活動,如組尋路。更高的層次上管理播放機的所有組由播放器模組。
人工智慧機器學習儲存和載入它的資料使用的永續性資料模組的介面。
Persistant data永續性資料
此模組是負責資料之間不同的遊戲sessions.Among其他應可用於儲存和載入,儲存查詢表和圖尋路模組和管理學習AI的accumulateddata的機器。
Game actors遊戲參與者
遊戲參與者在遊戲中的地形,單位或建築物。他們的3D模型獲得通過Unity3D的渲染管線的視覺化。每場比賽的演員擁有AI模組,控制它的行為。
Steering behaviours指導行為
指導行為的計算力量,影響如何以及如何快速自主遊戲代理能動,應該可以用於避障,人流或簡單的尋找任務。
Pathfinding尋路
這模組負責建立一個pathgrid,障礙物資訊收集和提供各種尋路請求aninterface的。為了獲得更好的效能的一些資訊儲存到從磁碟中載入。
Input輸入
此模組跟蹤使用者的輸入,對其進行處理,並生成反饋。
Network網路
網路模組是負責所有遊戲演員的狀態管理是保持比賽狀態,在兩臺機器上都保持一致,以避免抖動網路單元運動網路game.Another責任。
GUI
圖形使用者介面(GUI)顯示所有按鈕,選單,在小地圖和倒數計時器。它也負責為這些元素的功能和互動依賴與用於此目的的遊戲的邏輯模組。
3D渲染
該模組主要管理Unity3D的。場景的主攝像頭確定需要渲染的物件,並把它們傳送通過渲染管線。Unity3D的封裝最渲染的細節,而且還提供了通過畫素和頂點著色器的訪問。
Unity場景設定
在遊戲中的每一個圖表示由Unity3D的場景。下面是一個典型的場景設定在Unity層次(一)和(二)在現場視窗看起來像:
Unity層次的地圖
場景檢視的地圖
現在所有的遊戲物件從頂部面板底部進行說明。
CWalls
這個物件包含自定義繪製牆節點和牆壁邊緣。另一種是使用自定義繪製牆壁到calculatethem取決於地圖的幾何。
Directional light(定向光)
此燈僅用於計算地形光照貼圖。關閉之後,由於效能的原因。
Game Music(遊戲音樂)
持有遊戲的主要音樂和播放現場啟動。
GameController(遊戲控制器)
GameController遊戲物體持有並管理所有的遊戲物件,管理遊戲的邏輯。它包括以下物件:
CursorController(游標控制器):
管理游標的外觀和背後的邏輯。
GameInstantiator(遊戲例項化):
這個重要的遊戲物件是負責例項化其他物件需要建立非特異性順序。
GameInstantiator in the Inspector
GameController in the Hierarchy
GameInstantiator持有的的地圖,PathCreator路徑建立和管理障礙,管理球員配置和設定,是用來處理使用者輸入的的InputControl遊戲物體,遊戲場遊戲物體和參考玩家遊戲物體上的建築物referenes定義了可播放的區域的地圖。
它還包含了玩家的重生點和自定義路徑和牆壁的引用。
GUI
擁有地圖的所有GUI物件。
Machine Learning Controller
此遊戲物體控制的所有功能,機器學習需要。
spawn1, spawn2
實際玩家的重生點。重生點的標誌是綠色立方體“場景檢視。
HPaths
自定義路徑節點,在地圖的邊緣。自定義節點在場景編輯器中標記,並概述紅線。
Main Camera(主攝像機)
現場的主攝像頭和音訊監聽。所有的3D聲音是從相機的角度觀察。
PlayArea(遊戲場)
定義實際可玩的地圖區域。
Base Prefabs(基地預製)
散落在地圖上的建築物。
Terrain(地形)
Unity地形物件。
TestRunner
一個物體,用於執行單元測試與Unity3D的的單位testingframeworkSharpUnit的。
MVC Pattern(MVC模式)
Unity引擎的設計鼓勵MVC(模型 - 檢視 -控制器)面向engineering.In的我的情況下,結構看起來像這樣:
圖5:MVC模式的體系結構表示
模型包含了所有的遊戲物件,元件和資料檔案。遊戲物體的渲染器和攝像機物件的訪問。
檢視呈現模型和主要管理Unity3D的引擎渲染。它需要accessthe持有模型的3D模型,紋理,材質和效果。它還具有什麼輸入選項的影響。
控制器接收使用者輸入並呼叫模型物件上的方法反應。這是在我的遊戲中所表示的輸入子系統。使用者能影響與他的輸入的檢視。
Multiplatform Development(多平臺發展)
Unity允許部署專案在不同的平臺上有輕微的變化。演示和功能在很大程度上是保持取決於平臺的capabilities.However,在某些領域,如在不同的裝置上的輸入機制存在重大分歧。
抽象工廠設計模式應用於設計這些元件。
The Abstract Factory Pattern抽象工廠模式
圖6:抽象工廠模式
抽象工廠模式(見圖6)保護客戶從不同的平臺上實現相同的概念在不同的APC與平臺是一家集的AbstractProduct類。這些類表示一個概念,是支援所有的抽象工廠platforms.An類宣告建立單一產品的經營,ConcreteFactory類代表一個特定的平臺。
客戶端只使用抽象工廠和抽象產品的方法,因此從一個平臺的具體實施保護。
Input and Persistant Data(輸入和永續性資料)
主要有兩個方面的遊戲,不同的實施要求是輸入機制和usageof的永續性檔案的資料。Unity3D中不支援跨plattform資料庫。這就是為什麼機甲和坦克使用的永續性資料在磁碟上的二進位制檔案。所有平臺得到了他們對於自己的能力和自己的實施,支援的檔案格式。
為了保持可讀性和靈活性以下適應跨平臺的輸入處理的抽象工廠模式:
圖7:輸入子系統結構摘自
這僅僅是一個小所涉及的所有平臺和命令,選擇用於演示的摘錄。
InputManager被附加到遊戲物體在場景中的InputControl。它呼叫CommandImplementor的Execute方法的每一幀裡面的更新功能。執行方法的CommandImplementor遍歷所有新增的命令,檢查他們的執行情況表示滿意,並呼叫Execute方法,如果是這樣。
輸入子系統的組成部分的圖中的抽象工廠模式:
iOS+Unity
機甲和坦克被創造的過程迭代開發,這是什麼原因,為什麼遊戲已經播放任何調整之前為iPad™。
本章介紹和分析面臨的挑戰和解決方案移植機甲和坦克的iPad™。
Maximum Polygon Count(最高多邊形計數)
其中一個最明顯的限制,適用於iPad™遊戲的多邊形數量的圖形晶片能夠呈現每個frame.It的橫空出世,超過30萬個多邊形,每幀開始下降,低於25 FPS的幀率對iPad™。在3D建模軟體,通過手動消除邊緣和應用預定義的演算法減少多邊形,從一開始,某些型號甚至rebuiilding減少多邊形計數後,目前在所有平臺上的多邊形數量是:
平均多邊形數量大約是每單位300。如果所有的24個敵人和播放器單元的相機拍攝的,在一幀中產生的多邊形的數量將是7200,平均約8500,在最壞情況下24runners.Adding最大4000地形的多邊形(平截頭體的其餘部分的地形得到撲殺),最重的幀將給予約12500GPU多邊形渲染。
Draw Call Reduction and Lights(繪製減少呼叫和燈)
即使在移動裝置上不俗的表現,更重要的是每幀繪製呼叫的數量。一場平局發出呼叫的GPU每次繪製一個模型。如果模型有n子網格就會造成至少Ñ戰平calls.EveryGUI質地,選擇飛機和健康欄新增一個呼叫到現場。
額外抽獎呼叫另一個來源是每畫素光照,導致額外的繪圖呼叫每一個光pass.That就是為什麼合併成一個模型中的所有子網和型號不使用動態照明。所有的模型和地形紋理的燈光烤英寸光影烘烤計算每個紋理獲取靜態光源照亮奠定了光照貼圖在紋理的亮度。看上去好像他們的燈光的影響,雖然沒有計算模型。圖8顯示了幾個模型,而無需光照貼圖或燈光效果。
圖8:熄滅紋理材質著色器和沒有燈光的烘烤模式截圖
圖9:遊戲擴大統計視窗右上角的檢視
這是說,可以結合Unity若干個物件,共享相同的材料製成的,在執行時,在一個單一的繪製呼叫的繪製在一起。這種方法被稱為動態配料[18]。圖9顯示了66戰平呼叫以下來源所造成的一個場景:
(GUI)圖形使用者介面
8繪製呼叫之縮小貼圖按鈕,,倒計時倒計時文字的+24個圖斑+8號樓地圖斑+1相機地圖現貨。總結41GUI造成繪製呼叫。
Terrain(地形)
4畫通話。其中每個質地。
Visible Models(可見模型)
14平局呼籲。每個模型會導致比3戰平呼叫自身的。一個用於單元網格,一個為healthbar網格和一個用於選擇平面網格。低的數字都可以解釋與Unity的動態配料。
Terrains(地形)
Unity3D中沒有支援的地形為iOS,直到Unity3.4釋出於2011年7月[19]。為了找到最佳的解決方案機甲和坦克,地形實施的兩種可供選擇的方式已經過測試:模擬地形在3D程式:一個3D建模程式和地形分割成不同的部分(見圖10)。分割槽的效果,大部分分部視錐Unity撲殺。那meansthat只有至少部分可見的段得到呈現。
圖10:仿照地形突出部分
這種技術被丟棄創造新的地形,因為這個過程會非常complicatedcompared Unity的地形系統,紋理大小是非常大的或質量受到影響。*地形:地形移動系統移動系統是一個解決方案,可通過Unity資產商店T4M地形可以用於移動裝置,並可以轉換成Unity的地形。原來,這個解決方案的效能是不夠的遊戲。
地形最終解決方案是使用Unity地形引擎,具有非常低的質量設定。這是唯一可能後Unity3.4釋出於2011年7月加入Unity地形對移動通訊系統的支援。
GUI-Optimization(GUI優化)
該的Unity引擎提供兩種方式來實現GUI。一種方式是使用Unity的GUI的系統UnityGUI,需要它的功能,是一個特殊的功能calledinside名為OnGUI(),即執行每幀兩次和onceevery事件的。這個系統只用於主選單,並暫停選單,在allvalues需要計算外OnGUI功能。
GUI紋理用於所有其他GUI元素象的GUI按鈕和小地圖上以維持效能。GUI紋理的平面圖像中顯示的2D和每幀渲染一次。
Script-Optimizations(指令碼優化)
為了授予指令碼的效能高,最便宜的方法進行跟蹤與profiler.It橫空出世,被稱為最昂貴的方法可以通過尋路或轉向行為子系統。尋路已被優化,如下文所述在AI部分。有人還提出確保昂貴的功能,如轉向行為和其他AI程式不會呼叫每一個幀。