色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 一瞥Unity集成開發環境中的軟件工程設計思想

一瞥Unity集成開發環境中的軟件工程設計思想 時間:2018-09-27      來源:未知

概述: 本文對Unity集成開發環境主要部分進行了軟件工程技術上的拆解,嘗試從交互式的編程技術、正向與反向工程、設計模式、組件模型設計、 面向對象的設計和軟件可擴展性等幾個方面進行了論述,為想深入了解Unity開發世界的技術人員奠定基礎。

1 背景

Unity是一個強大的集成游戲引擎和編輯器,可以讓開發者可以迅速高效地創建對象、導入外部資源,并且用代碼把它們連接在一起。Unity編輯器是 可視化的,其圍繞這樣的原則而構建,即開發者可以使用一個簡單的拖放動作來完成任何任務,甚至可以連接腳本,自己編寫程序實現特定的功能。

鑒于Unity 3D的集成開發環境的安裝和搭建已經有了論述,我們試圖對Unity集成環境進行簡要的技術解析。下面會首先介紹Unity總體集成 開發環境的主界面布局,而后對Unity的軟件工具設計思想進行軟件技術上的分析。

2 總體開發環境概覽

正如Visual Studio為微軟公司的Windows平臺提供高效的開發環境一樣,Unity的集成開發環境為虛擬現實(AR/VR/MR)平臺的開發提供了有力的生產 力工具。下面對開發界面布局中涉及的主要子窗口略要說明。

• Scene【場景面板】:該面板為Unity3D的編輯面板;你可以將你所有的模型、燈光、 以及其他材質對象拖放到該場景中。構建游戲中所能呈現景象。

• Game【游戲面板】:與場景面板不同,該面板是用來渲染場景面板中景象的。該面 板不能用作編輯,但卻可以呈現完整的動畫效果。

• Hierarchy【層次清單欄】:該面板欄主要功能是顯示放在場景面板中所有的物體對 象。

• Project【項目文件欄】:該面板欄主要功能是顯示該項目文件中的所有資源列表。 除了模型、材質、字體等,還包括該項目的各個場景文件。

• Inspector【監視面板】:該面板欄會呈現出任何對象的所固有的屬性,包括三維坐 標、旋轉量、縮放大小、腳本的變量和對象等等。

• 【場景調整工具】:可改變你在編輯過程中的場景視角、物體世界坐標和本地坐標 的更換、物體法線中心的位子,以及物體在場景中的坐標位置,縮放大小等等。

• 【播放、暫停、逐幀按鈕】:用于運行游戲,暫停游戲和逐幀調試程序。

• 【層級顯示按鈕】:勾選或取消該下拉框中對應層的名字,就能決定該層中所有物 體是否在場景面板中被顯示。

• 【版面布局按鈕】:調整該下拉框中的選項,即可改變編輯面板的布局。

• 【菜單欄】:和其他軟件一樣,包含了軟件幾乎所有要用到的工具下拉菜單。

圖 1 Unity中文集成開發環境

圖 2 Unity英文集成開發環境

由于中英文表達習慣的不同,不同的技術人員對術語的中文表達存在差異性,下面為了讀者更好地理解,特此總結表格如下:

中文名稱 別名列表 英文名稱 游戲預覽面板 Game選項卡 游戲面板 Game 場景設計面板 Scene選項卡 場景面板 Scene 游戲組成對象列表 Hierarchy選項卡 層次清單欄 Hierarchy 項目資源列表 Project選項卡 項目文件欄 Project 屬性查看器 Inspector選項卡 監視面板 Inspector 菜單欄 包括各個子下拉菜單如文件/編輯/資源/游戲對象/組件/移動輸入/窗口/幫助 Files/Edit/Assets/GameObject/ Component/Mobile Input/Window/Help 版面布局按鈕 控制面板布局 集成環境布局 布局下拉列表 Layout(2 by 3 / 4 split…..) 屏幕顯示按鈕 分層操作(局部操作)/ 渲染順序 分層下拉列表 Layers / Sorting Layers 場景調整工具 坐標軸位置調整, 物體世界坐標和本地坐標 變換Gizmo切換 Center/Pivot, Local/Global 播放、暫停、逐幀按鈕 播放按鈕/暫停按鈕/逐幀按鈕 播放控件 Play/pause/next

3 交互式編程技術

3.1 引言

計算機科學領域,交互式編程技術很早就有了實現版本,比如Tcl/Tk語言應用在美國很多高校的實驗室和研究所,用來快速展現原型設計。鑒于很多 工程師剛走出校門,很多從編譯型語言收益,尤其是c/c++,因此容易養成了“慣性”。隨著現代編程語言的大量涌現,比如python語言,特別是網絡 經濟所催生的“短-平-快”模式,使得交互式的編程語言技術更加契合技術人員的生活。比如:

Python語言

Python的設計哲學是“優雅”、“明確”、“簡單”,是一門完全面向對象的語言。IDLE是Python軟件包自帶的一個集成開發環境,初學者可以利用 它方便地創建、運行、測試和調試Python程序。IDLE帶有一個編輯器,用來編輯Python程序(或者腳本);有一個交互式解釋器用來解釋執行Python 語句;有一個調試器來調試Python腳本。正式由于交互的解釋器為該編程語言提供了便利。

Ruby語言

Ruby是一門開源的動態編程語言,注重簡潔和效率。因此Ruby 的句法優雅,讀起來自然,寫起來舒適。它也是一種簡單快捷的面向對象(面向對象程 序設計)腳本語言,它的靈感與特性來自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 語言。Ruby的交互性可以通過“irb”展現。irb是一個交互式 的Ruby界面(Ruby解釋器)。可以通過irb來調試、運行和實驗Ruby代碼。這意味著它不用處理文件,可以直接在會話中輸入代碼,測試Ruby代碼,同 時也是一個學習Ruby的好工具。

Powershell/Bash

Bash是Unix系統或類Unix系統支持很久的shell解釋器,Powershell是微軟公司新型針對Windows平臺的解釋器,兩者都可以通過技術人員敲命令快速 實現編程。正是由于應用的普遍性,使得很多技術人員忽略了它們本身就是一門很好的,有用的和便捷的交互式編程語言。但缺點就是跟其它圖形化 的解釋器相比,在可視化編程方便還仍顯得笨拙和低效。

總之,交互式的編程語言(很多是腳本語言)都提供類似的控制臺,直接輸入腳本語句,回車就執行了,結果立即顯示出來,無須經過復雜的保存和 編譯階段。

3.2 Unity集成環境的場景面板

Unity 3D中,“場景”是一個視圖,我們通過“場景”這個視圖,來編輯、布置游戲中玩家所能見到的圖像和聲音。場景包含游戲的對象。它們可以 用來創建主菜單、個人級別(level)和其他任何東西。認為每個獨特的場景文件作為一個獨特的級別(level)。在每一個場景中,你將放置你的環 境,障礙和裝飾,從而設計和構建了你的游戲。

在開發過程中,我們能在“Scene”視圖中,就可以直接放入所有的游戲對象(物體),從而共同形成一個場景,而且會在Hierarchy視圖中通過層級 關系列出來。

圖 1 當前3個發展方向

透過上面的分析,我們能夠看到Unity環境很好滴沿用了現代編程語言的交互式開發模式和體驗,只需用戶將需要的物體放入場景(如圖中放入一個球 體),Hierarchy選項卡就可以實時看到物體的諸多屬性;反過來用戶修改某個屬性信息又可以在場景環境中實時地看到變化。而且,在游戲(Game) 選項卡中用戶能夠預覽到運行時的場景變化。

4 正向工程與反向工程

4.1 引言

反向工程也稱逆向工程(英文是reverse engineering),是相對正向工程而言,大意是根據已有的東西和結果,通過分析來推導出具體的實現方法。 在我們現實的軟件世界里,比如從某個能夠做出某種動畫效果的可執行程序(.exe/elf),通過反匯編、反編譯和動態跟蹤等技術方法,分析出其動 畫效果的實現過程,這種行為就是逆向工程;不僅僅是反編譯,而且還要推倒出設計,并且文檔化,逆向軟件工程的目的是使軟件得以維護。再比如 Java代碼或C#代碼通過逆向構建 UML 類及序列圖時,能夠使得技術人員改動代碼的同時實時更新建模圖形的變化。技術人員往往通過IBM® Rational® Software Architect 將 Java源代碼做逆向工程生成 UML 類和序列圖,通過.Net / Visio軟件工具將C#源代碼做逆向工程諸如此類。

4.2 Unity集成環境的屬性查看器

明白了上面提到的軟件工程思想后,讓我們瞧一瞧Unity是如何體現這一點的。

上面的圖說明的是: 用戶能夠通過操作Unity的環境菜單生成C#腳本文件;反之,用戶又可以通過修改腳本文件來改動Inspector面板的布局。比如, 正如圖中顯示的腳本文件中增加了Test類,在Inspector面板中有相應的更新顯示。此外,如果用戶對缺省的面板風格不滿意,用戶還能夠通過在腳本 文件中繼承Editor類的方法對監視面板進行大幅度的改動。我們能夠看到,這里充分體現了反向工程的設計思路。

5 單實例設計模式

5.1 設計模式

按照設計模式總結的幾大類軟件模式設計角度,單例模式是一種對象創建模式,它用于產生一個對象的具體實例,它可以確保系統中一個類只產生一 個實例。比如說,Java 里面實現的單例是一個虛擬機的范圍,因為裝載類的功能是虛擬機的,所以一個虛擬機在通過自己的 ClassLoad 裝載實現單 例類的時候就會創建一個類的實例。在 Java 語言中,這樣的行為能帶來兩大好處:

1 對于頻繁使用的對象,可以省略創建對象所花費的時間,這對于那些重量級對象而言,是非常可觀的一筆系統開銷;

2 由于 new 操作的次數減少,因而對系統內存的使用頻率也會降低,這將減輕 GC (指JVM的內存回收算法)壓力,縮短 GC 停頓時間。

因此對于系統的關鍵組件和被頻繁使用的對象,使用單例模式可以有效地改善系統的性能。單例模式的核心在于通過一個接口返回唯一的對象實例。

5.2 Unity的單實例運用

在Unity的集成開發環境中,對IDE環境的配置可以通過偏好(Preferences)選項窗口進行全局性的配置,包括編輯器的選擇,顏色的選擇,快捷鍵的 設置等等,這些配置信息保存到配置文件中構建了全局唯一的配置實例。

比如外部工具選擇的腳本編譯器選項,在Mac系統環境下,可以選擇MonoDevelop或者Xamarin Studio兩種開發工具,相應地Windows系統環境下,可以 選擇MonoDevelop或者Visual Studio兩種IDE開發環境。這種設計思路往往在很多的可視化工具設計環境當中,我們能夠找到很好的例子。另外,這里 展現的Unity環境一個不同于其它環境的特點就是考慮了設計工具的協同工作,直接和其它現成的優秀開發工具一道為項目開發更好地服務。

6 組件化設計

6.1 模塊化設計

早在C語言大行其道的時代,基于模塊化的設計思想受到了很大的歡迎。通過接口和實現分離的形式,在項目開發實踐中得到了廣泛的運用。微軟公司 倡導的基于構件(Component)或組件的開發模式,構建了微軟操作系統的設計哲學,尤其是.Net生態系統,從早期低效的ActiveX控件到com, 到現在 的com+,直到.Net的成熟,微軟公司把組件對象模型技術發揮的淋漓盡致。

但好多技術人員還是把模塊化和組件化混為一談,兩者有著共性和個性。兩者理解上是否存在差異往往取決專業背景、所在領域、以及視角。 從設計上來看,組件強調復用,模塊強調職責(內聚、分離),或者說組件是達到可復用要求的模塊。模塊或模組(Module)的核心意義是分離職責, 屬于代碼級模塊化的產出。本身是一組具有一定內聚性代碼的組合,職責明確。對外的接口可以是松散的,也可以是集中的。SEI的定義為:提供一組 連貫的職責的軟件的實現單元。它以問題分解的形式,來解決軟件設計問題。它更強調一個內聚的概念,形式上類似于Java語言中的包概念,也可以 是一個源代碼目錄(C語言也是)。

 

組件或者構件(Component)使用比較廣泛,它的核心意義在于復用,相對模塊,對于依賴性有更高的要求。概念上與模塊基本等同,只是明顯有依賴性 的要求。(早提出時概念)。

6.2 Unity的組件化應用

Unity的設計把組件化的軟件工程設計思想進行了充分的發揮,Unity環境內置了打包器(Packer)和解包器(Unpacker),技術開發人員可以將自己 制作的插件打包成.unitypackage的格式,然后進行網站上的發布供其它開發人員導入。

圖 10 臉譜的Oculus VR產品

比如說,Vuforia是一款由Qualcomm推出的AR應用開發工具,能將現實世界物體轉變為互動體驗的擴增實境平臺,旨在幫助開發者打造全新級別的真實 世界物品與虛擬物品的互動。Vuforia SDK可以通過官方網站進行下載(圖中的vuforia-unity-6-0-117.unitypackage名稱),開發者能夠在Unity的 環境下,通過下圖中的菜單彈出窗口將該軟件包導入項目選項卡窗口中去。與此同時,也將解壓后的很多資源文件導入了項目。

7 可擴展性設計

7.1 概要思路

可擴展性設計與實現是軟件工程所倡導的重要設計原則之一。若要完美地達成設計目標,需要與面向對象的設計、模塊化或組件化的設計思維、設計 模式等軟件設計思想結合起來進行充分的運用和發揮。面向對象設計的OCP(開-閉原則)設計原則,就是一個很好的例證。在C++類庫實現的過程中, 公開的接口和封閉接口的需要針對用戶的取得平衡。軟件功能模塊劃分的“緊內聚,松耦合”,通用的部分做成平臺模塊,不同盡量實現成可配置模 塊。還有設計模式當中的適配器模式等等,所有都很好地體現了可擴展性設計的思路。

7.2 Unity的可擴展性體現

7.2.1 Unity的Gizmos

Unity的Gizmos類可在Scene視口中繪制圖像用來顯示設計細節。利用Gizmos.DrawIcon函數可以在場景視口中繪制一個圖標以標記特殊的對象和位置。 該函數使用的圖像文件需要位于 Gizmos中。

下圖中,Unity開發環境中的Gizmos按鈕所涉及到的基于Gizmos類的繪制射線,線段,網格球體,實體球體,網格立方體,實體立方體,圖標,GUI紋 理,以及攝像機線框。但有些特殊的場景視圖,用戶只能夠自己編碼實現定制化的Gizmos類實例。

7.2.2 Unity的編譯擴展方式

再舉個例子就是Unity對腳本擴展的實現方式。

通常情況下,Editor 文件夾中的腳本主要用來擴展unity編輯器的功能方便開發。這些腳本將不會打包進終發布的游戲中。項目中可以使用多個 Editor 文件夾,但是該文件夾中的腳本不允許用當GameObject對象的組件(Component)。Plugins 文件夾中存放用于擴展unity功能的插件(多為 C/C++寫成的原生動態鏈接庫(DLLs))。這些插件可以訪問第三方代碼庫,系統API以及其他超出Unity功能的模塊。

在unity開發中,有的時候定制項目文件夾以管理游戲資源,包括代碼資源。但unity保留了一些特殊文件夾用來做特殊用途,例如編譯順序。

Unity的腳本編譯有4個階段(phase),腳本處在哪個編譯階段取決于腳本所在的文件夾。如果你的一些腳本需要引用一些別的文件夾中定義的類,則 需要關心他們的編譯順序。你引用的類需要先于你的當前類編譯。或者當你需要引用其他語言的腳本時,那么該腳本必須處于更早的編譯階段。

Unity中的4個編譯階段如下(類似于X Windows應用對資源文件的查找方式):

1.處于 Standard Assets, Pro Standard Assets 和 Plugins 文件夾中的運行時腳本(Standard Assets 文件夾需是Assets的一 級子文件夾);

2.處于 Standard Assets, Pro Standard Assets 和 Plugins 文件夾下的以 Editor 命名的一級 子文件夾中的腳本;

3.頂級 Editor 文件夾中的腳本;

4.其他 Editor 文件夾中的腳本(例如其他文件夾下的以 Editor 命名的子文件夾) 另外在 Assets 文件夾中以 WebPlayerTemplates 命名的頂級子文件(即Assets/WebPlayerTemplates)將不會編譯。若是處于別的文件夾下的 WebPlayerTemplates (如Assets/Scripts/WebPlayerTemplates)將不會防止編譯。

8 面向對象的設計

8.1 面向對象設計思想

眾所周知,封裝、繼承和多態是面向對象語言設計的三大原則。微軟在早期的Visual C++版本就支持了通過類繼承機制構建的龐大MFC類庫,如今 的.Net類庫包含了這種思想。如今流行的C++,Java,Python,Ruby等程序設計語言都支持面向對象思想的程序設計思想。

8.2 Unity的類庫實現

下圖Unity的類庫遵照典型的類層次關系圖,圖中的符號含義如下:


所有類的抽象基類Object,游戲場景中所放置的所有游戲對象皆從此類繼承而來,有點類似于蘋果系統中的NSObject (面向對象C的基類)。Unity開發 工程中涉及用到的動畫、攝像機、燈光、腳本行為、粒子渲染、碰撞器、剛體、變換、材料、網格、著色器和渲染器等等均按照類的繼承和組合關系 實現的。

9 結論

本文試圖帶領初涉Unity開發的技術人員或工程師,站在軟件工程設計和實現的角度,從多個視角挖掘和體會一下Unity集成開發環境中所蘊含的思想 ,為技術人員更好的利用該環境進行各個領域的開發打下良好的工具使用基礎。

供讀者參考資料:

[1] https://en.wikipedia.org/wiki/Interactive_programming

[2] //baike.baidu.com/item/Ruby/11419

[3] https://www.ruby-lang.org/zh_cn

[4] //www.ibm.com/developerworks/cn/java/j-lo-Singleton/index.html

上一篇:Linux字符設備驅動模型之設備號

下一篇:簡析靜態庫與動態庫

华清图书馆

0元电子书,限时免费申领

10本华清图书PDF版

扫码关注华清远见公众号
自动回复“2”,即可申领!
熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 麻豆画精品传媒2021一二三区 | 嫩草视频在线观看 | 亚洲Aⅴ在线无码播放毛片一线天 | 中文字幕av久久激情亚洲精品 | 亚洲AV综合色一区二区三区 | 日本三级韩国三级香港三级写真集 | 色噜噜狠狠一区二区三区 | 国产成人高清精品免费软件 | 粗壮挺进人妻水蜜桃成熟 | 粉嫩高中生的第一次 | 日韩AV高潮喷水在线观看 | 性一区 | 一二三四在线观看免费高清中文在线观看 | 黄污视频在线免费观看 | 日本黄色大片在线观看 | 在线看色 | 奶水都出来了[14p] | 丰满少妇猛烈进入a片88 | 99视频国产精品 | 日本在线视频WWW色影响 | 色就是色网站 | 亚洲欧美日韩国产综合一区二区 | 国模无码视频一区二区三区 | 日韩亚洲欧美精品综合 | 综合色国产 | 中文字幕日韩高清在线 | 日本熟妇大BBW | 夜夜天天噜狠狠爱2019 | 国产精品99久久久久久动医院 | 亚洲一区AV无码专区在线观看 | 六度影院鲁鲁片在线看 | 卡通动漫第一页 | 午夜福利18以下勿进 | 销魂美女一区二区 | 狠狠操狠狠搞 | 亚洲涩涩视频 | 50岁四川熟女露脸A片 | 成人A毛片免费播放 | 99热这里只有精品国产免费免费 | 在线观看国产成人av天堂 | 伊人久久大香线蕉亚洲五月天 |