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程序不會調用每一個幀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章