版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章虛擬現(xiàn)實技術(shù)概述1、虛擬現(xiàn)實的概念2、虛擬現(xiàn)實利用的技術(shù)3、虛擬現(xiàn)實技術(shù)的特點1.1什么是虛擬現(xiàn)實1、虛擬現(xiàn)實萌芽。1929年2、虛擬現(xiàn)實雛形。20世紀60年代3、虛擬現(xiàn)實快速發(fā)展。20世紀80-90年代4、虛擬現(xiàn)實高速發(fā)展。21世紀1.2虛擬現(xiàn)實的發(fā)展1、虛擬現(xiàn)實萌芽。1929年2、虛擬現(xiàn)實雛形。20世紀60年代3、虛擬現(xiàn)實快速發(fā)展。20世紀80-90年代4、虛擬現(xiàn)實高速發(fā)展。21世紀1.2虛擬現(xiàn)實的發(fā)展1、影視娛樂2、教育領(lǐng)域3、設(shè)計領(lǐng)域4、醫(yī)學領(lǐng)域5、軍事領(lǐng)域6、航空航天領(lǐng)域1.3虛擬現(xiàn)實的應用領(lǐng)域1、國家對虛擬現(xiàn)實技術(shù)的重視2、虛擬現(xiàn)實的學科綜合性和不可替代性1.4虛擬現(xiàn)實技術(shù)的發(fā)展前景謝謝第2章虛擬現(xiàn)實技術(shù)的設(shè)備
OcolusRift是一款為電子游戲設(shè)計的頭戴顯示器。同時使用了三種追蹤手段,在頭顯和控制器都內(nèi)置了加速計和陀螺儀,快速捕捉位置和方向上產(chǎn)生的變化。2.1OcolusRift
HTCVIVE是和Valve共同開發(fā)的一款虛擬現(xiàn)實頭盔產(chǎn)品,HTCVIVE產(chǎn)品配件是由一個頭戴顯示器、兩個單手持控制器、一個能用于空間內(nèi)同時追蹤顯示器與控制器的定位系統(tǒng)組成,在這三部分上可以給使用者提供一個不錯的沉浸式體驗。2.2HTCVIVE
這款虛擬現(xiàn)實頭戴式顯示器產(chǎn)品配件包括頭盔、體感手柄、Camera、視頻處理模塊、電源線、電源供應模塊、USB連接線、PlayStationVR視頻信號線、以及一個立體聲耳機。PlayStation提供100度的視野,120Hz的刷新率和低于18ms的延遲,這將意味著它比具有更號延遲和更慢刷新率的其他虛擬現(xiàn)實設(shè)備更少引起佩戴者的不良反應。2.3PlayStationVR
移動VR一體機一種全新的VR設(shè)備。移動VR一體機使用方便,性能強大,可以讓用戶隨時隨地享受VR,深受人們的喜愛。高端的VR一體機正在成為新型游戲設(shè)備,配備紅外發(fā)射器,使它能夠準確的跟蹤頭部運動,并配有帶傳感器的手柄來追蹤手部動作。VR一體機對于市場來說,是一種較為新穎具有優(yōu)勢的產(chǎn)品,他對于手機VR眼鏡,由于他擁有完整的VR系統(tǒng),所以更容易受到使用者的接受,而對于PCVR頭顯,他的便攜式,它的價格有著巨大優(yōu)勢,更適合于普通的游戲愛好者,科技宅,和入門級開發(fā)者的使用。2.4VR一體機
VR手機盒子成本低廉,易于攜帶,發(fā)開應用的流程也是手游開發(fā)者所熟悉的。隨著智能手機性能的快速提升,移動開發(fā)環(huán)境非常成熟和活躍,VR眼鏡的成本相對較低,擁有一定價格優(yōu)勢。但是由于并沒有獨立的操作系統(tǒng),只是附著于手機操作系統(tǒng),嚴格意義上來說,根本無法算是VR產(chǎn)品,一般的作用也是看看手機視頻,通過手柄玩手機上的游戲。2.5VR手機盒子
HoloLens是微軟公司開發(fā)的一種MR頭顯(混合現(xiàn)實頭戴式顯示器),HoloLens不會像《星際迷航》那樣生成每個人都可見的3D世界,只有佩戴者能夠看見,其他人只會看到您正佩戴一副滑稽古怪的眼鏡和一系列離奇古怪的動作。HoloLens的另一個關(guān)鍵之處在于:微軟沒有打算為用戶呈現(xiàn)一個完全不同的世界,而是將某些計算機生成的效果疊加于現(xiàn)實世界之上。用戶仍然可以行走自如,隨意與人交談,全然不必擔心撞到墻。2.6微軟Hololens
MR的意思是MixedReality混合現(xiàn)實,與GoogleGlass的AR增強現(xiàn)實技術(shù)不同的是,HoloLens運用的MR技術(shù)具備環(huán)境學習能力,能夠?qū)崿F(xiàn)全息影像和真實環(huán)境的融合。比如HoloLens能把整個銀河塞在您的房間里,又或者是讓外星人把您家墻壁鑿出一個大洞。與VR技術(shù)不同,HoloLens運用的MR技術(shù)并不沒有為用戶帶來沉浸感,其真實感覺完全來自全息影像和真實環(huán)境的完美契合,因此說MR技術(shù)比AR、VR技術(shù)更高級也是可以理解的。2.6.1MR技術(shù)簡析
CAVE,英文全稱CaveAutomaticVirtualEnvironment,中文譯為“洞穴狀自動虛擬系統(tǒng)”,CAVE是一種基于投影的沉浸式虛擬現(xiàn)實設(shè)備,其特點是分辨率高,沉浸感強,交互性好。CAVE沉浸式系統(tǒng)是世界上一種成熟的高度沉浸式虛擬現(xiàn)實系統(tǒng),它把高分辨率的立體投影技術(shù)、三維計算機圖形技術(shù)和音響技術(shù)等有機地結(jié)合在一起,產(chǎn)生一個完全沉浸式的虛擬環(huán)境。在該系統(tǒng)中,3D環(huán)境中的任何物體,都可以感受參與者操作,并實施產(chǎn)生相應變化。2.7虛擬現(xiàn)實設(shè)備CAVE
CAVE是一種基于投影的系統(tǒng),它由圍繞觀察者的四個投影面組成。四個投影面組成一個立方體結(jié)構(gòu),其中三個墻面采用背投方式,地面采用正投方式。觀察者戴上液晶立體眼鏡和一種六個自由度的頭部跟蹤設(shè)備,以便將觀察者的視點位置實時反饋到計算機系統(tǒng)和體驗身臨其境的感覺。當觀察者在CAVE中走動時,系統(tǒng)自動計算每個投影面正確的立體透視圖象。同時,觀察者手握一種稱為Wand的傳感器,與虛擬環(huán)境進行交互。2.7.1CAVE技術(shù)原理
LeapMotion,中文名為“厲動”,它通過傳感器檢測雙手,雖然使用簡單,但功能強大且快速。LeapMotion真正的魔力之處在于骨骼追蹤,不僅為手掌或指尖建模,還為您的手部關(guān)節(jié)和骨骼建模。這意味著LeapMotion可以準確地猜測手指或拇指的位置,即使它們不可見。通過交互引擎提供了統(tǒng)一的物理交互范例。抓,揮,推,它們變得像在現(xiàn)實世界中-樣毫不費力。2.8LeapMotion謝謝第3章虛擬現(xiàn)實開發(fā)工具綜述
MultigenVEGA是MultiGen-Paradigm公司最主要的工業(yè)軟件環(huán)境,用于實時視覺模擬、虛擬現(xiàn)實和普通視覺應用。Vega將先進的模擬功能和易用工具相結(jié)合,對于復雜的應用,能夠提供便捷的創(chuàng)建、編輯和驅(qū)動工具。3.1MultigenVEGA
Quest3D是一個容易且有效的實時3D建構(gòu)工具。能在實時編輯環(huán)境中與對象互動。其特點是:1、圖形化編程。2、高超的性能。3、強大的圖形效果。4、擁有真實的物理引擎。5、人工智能,數(shù)據(jù)庫操作等附加功能。6、支持力反饋的設(shè)備。7、強大的網(wǎng)絡(luò)模塊支撐。8、漂亮的粒子特效系統(tǒng)。3.2Quest3D
虛擬現(xiàn)實平臺,簡稱VR-Platform或VRP。是一款由中視典數(shù)字科技有限公司獨立開發(fā)的直接面向三維美工的一款虛擬現(xiàn)實軟件。該軟件適用性強、操作簡單、功能強大、高度可視化、所見即所得。所有的操作都是以美工可以理解的方式進行,不需要程序員參與。3.3VirtualRealityPlaftorm
虛擬現(xiàn)實平臺,包含九大子產(chǎn)品。虛擬現(xiàn)實平臺,包括五大高級模塊。虛擬現(xiàn)實平臺,由中視典數(shù)字科技有限公司獨立研發(fā),具有完全獨立的自主知識產(chǎn)權(quán)。是中國第一款自主研發(fā)的虛擬現(xiàn)實軟件,也是中國國內(nèi)市場占有率最高的一款國產(chǎn)虛擬現(xiàn)實軟件。VRP可廣泛的應用于城市規(guī)劃、室內(nèi)設(shè)計、工業(yè)仿真、古跡復原、橋梁道路設(shè)計、房地產(chǎn)銷售、旅游教學、水利電力、地質(zhì)災害等眾多領(lǐng)域,為其提供切實可行的解決方案。3.3VirtualRealityPlaftorm
Unity3D,又名Unity、U3D,是由UnityTechnologies開發(fā)的一個具有三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎及虛擬現(xiàn)實開發(fā)引擎。是目前市面上最流行的VR開發(fā)工具,本書采用的開發(fā)工具就是Unity3D。3.4Unity3D
Unity3D開發(fā)引擎的產(chǎn)品特點:1.支持多種格式導入。2.AAA級圖像渲染引擎。3.高性能的燈光照明系統(tǒng)。4.NVIDIA專業(yè)的物理引擎。5.高效率的尋路系統(tǒng)。6.友善的專業(yè)開發(fā)工具。7.逼真的粒子系統(tǒng)。
3.4Unity3D
Unity3D開發(fā)引擎的產(chǎn)品特點:8.強大的地形編輯器。9.智能圖形化界面設(shè)計。10.多平臺發(fā)布。11.單機及在線游戲發(fā)布功能。12.TeamLicense協(xié)同開發(fā)系統(tǒng)。13.可視化腳本語言。14.高寫真動態(tài)材質(zhì)模塊。3.4Unity3D3.4Unity3D
虛幻引擎4(UnrealEngine4簡稱UE4)是一款極為出色和流行的3D游戲引擎和開發(fā)工具,UE4是由Epic公司開發(fā)的一款游戲開發(fā)引擎,之前的版本是虛幻3。而虛幻4比之前版本有了很大的改進,使之成為一款風靡全球的游戲開發(fā)引擎。相較Unity而言,UE最大的特點就是渲染效果,UE可以在使用默認渲染的情況下,打造出精美的影視級效果。UE和Unity3D可是說在游戲開發(fā)及虛擬現(xiàn)實開發(fā)上的兩大巨頭,是應用最廣的開發(fā)工具。3.5UnrealEngine
虛幻4的功能特點如下:1.實時逼真渲染。2.可視化腳本(藍圖)開發(fā)。3.專業(yè)動畫與過場。4.健壯的游戲框架。5.靈活的材質(zhì)編輯器。6.先進的人工智能。7.源代碼開源。3.5UnrealEngine
EgretEngine(白鷺引擎)是白鷺時代推出的一款使用TypeScript語言構(gòu)建的開源免費的移動游戲引擎。包含渲染、聲音、用戶交互、資源管理等諸多功能,解決了HTML5性能、碎片化問題,應用于2D游戲、3D游戲開發(fā),及移動端交互式應用構(gòu)建,擁有完善的跨平臺運行能力。通過白鷺引擎,開發(fā)者可以快速地創(chuàng)建可以運行在手機App的WebView或者瀏覽器中的HTML5移動游戲,也可以編譯輸出成基于Android、iOS、WindowsPhone的跨平臺原生移動游戲。3.6白鷺
白鷺相較UE和Unity最大的特定是對H5平臺的支持,是一站式HTML5游戲開發(fā)工具。通過組件實體系統(tǒng)的架構(gòu)與數(shù)據(jù)驅(qū)動開發(fā)的設(shè)計思想,EgretPro被設(shè)計成一款可視化的開發(fā)工具,這使得游戲開發(fā)這一過程從游戲研發(fā)直接開發(fā)轉(zhuǎn)移到了游戲設(shè)計師直接可視化配置,通過這種方式,游戲開發(fā)效率得到了很大的提升。3.6白鷺引擎
LayaBox是2000年可樂吧打造的HTML5游戲引擎品牌,旗下產(chǎn)品為PC頁游、APP手游、HTML5游戲提供了三端融合的技術(shù)解決方案。LayaBox核心產(chǎn)品包括:全能型游戲引擎(LayaAir)、集成開發(fā)環(huán)境(LayaAirIDE)、H5游戲的原生服務(LayaNative)、發(fā)行對接服務(LayaOpen)、游戲商城服務(LayaStore)。支持語言:ActionScript3、TypeScript、JavaScript3.7Layabox3.7Layabox謝謝第四章開發(fā)語音
在進行虛擬現(xiàn)實開發(fā)時,我們首先要選擇開發(fā)語言,前文中對于虛擬現(xiàn)實開發(fā)工具進行了介紹,而每種不同的開發(fā)工具所使用的語言也不盡相同。選擇那種工具選擇哪種語言,是我們做虛擬現(xiàn)實開發(fā)首先面臨的選擇。本文應用的軟件是Unity3D,Unity3D支持的三種開發(fā)語言,分別是C#、Boo、JaveScript,在國內(nèi)應用最廣的就是C#。4.1.1開發(fā)語音
C#是微軟公司發(fā)布的一種由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言、運行于.NETFramework和.NETCore(完全開源,跨平臺)之上的高級程序設(shè)計語言。C#是由C和C++衍生出來的一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的面向?qū)ο缶幊陶Z言。它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言,因為這種繼承關(guān)系,C#與C/C++具有極大的相似性,熟悉類似語言的開發(fā)者可以很快的轉(zhuǎn)向C#。4.1.2什么是C#1、尋找規(guī)律;理解編程語句,為什么這么寫?掌握程序語言中的“主、謂、賓”。2、對標規(guī)律;理解什么是程序思想,尤其是面向?qū)ο笏枷耄瑢爽F(xiàn)實生活的理念,加深對思想的理解。
3、掌握規(guī)律;程序語言也是語言,也是一種說話方式,要去理解這種說話方式,掌握這種說話方式。4.1.3怎么學C#
VisualStudio簡稱VS是微軟為了配合.NET推出的一款免費開發(fā)工具,用戶只要注冊一個微軟的賬號即可使用,否則會有30天的試用期限。VS的下載和安裝會在之后Unity的安裝章節(jié)中講解,新版本的Unity在安裝的同時會詢問用戶是否安裝VS,同學們可以在安裝Unity的同時將VS一起安裝完成。4.1.4VisualStudio
VisualStudio簡稱VS是微軟為了配合.NET推出的一款免費開發(fā)工具,用戶只要注冊一個微軟的賬號即可使用,否則會有30天的試用期限。VS的下載和安裝會在之后Unity的安裝章節(jié)中講解,新版本的Unity在安裝的同時會詢問用戶是否安裝VS,同學們可以在安裝Unity的同時將VS一起安裝完成。4.1.4VisualStudio
1、關(guān)鍵字:C#語言中已經(jīng)被賦予了特定意義的一些單詞,例如Class、Struct
2、變量是程序代碼的最小單元,用來存放指定類型的值或?qū)嵗拇鎯卧?/p>
3、變量的類型值類型、引用類型,二者的區(qū)別(重點、難點)
4.2C#程序結(jié)構(gòu)
4、枚舉:定義一組可以賦給變量的命名整數(shù)常量提供了一種有效的方法。
5、常量:使用過程中不會發(fā)生變化的變量。
4.2C#程序結(jié)構(gòu)(1)算術(shù)運算符4.2.3運算符運算符名稱-減法*乘法/除法%取余++自加--自減(2)比較運算符4.2.3運算符運算符名稱<小于>大于>=大于等于<=小于等于!=不等于==等于(3)邏輯運算符4.2.3運算符運算符名稱!邏輯非,一維運算符,獲取當前bool值的相反值&&邏輯與,二維運算符,兩個bool值都為true,結(jié)果為true||邏輯或,二維運算符,兩個bool值都為false,結(jié)果為false
在我們做項目的過程通常要寫成千上萬行代碼,當過了一段時間后,就很難記住每一行代碼的作用,這就對閱讀、修改代碼帶來了麻煩,所有我們需要為代碼寫一些說明文字,這些文字就是注釋。注釋在程序運行時是不會運行。就像程序的說明書一樣。如果注釋的行數(shù)比較少,一般使用行注釋,用“//”開頭,對于連續(xù)多行的大段注釋,則用塊注釋,用“/*”開頭,用“*/”結(jié)尾。4.2.4注釋4.2.5語句
如果說變量是程序的最小單位,那么語句是構(gòu)造C#程序的基本單位,這二者的關(guān)系就像是語言中詞和句子的關(guān)系。語句可以聲明局部變量和常數(shù)、調(diào)用方法、創(chuàng)建對象、賦值等作用,通常語句通常以分號結(jié)尾。Console.writeLine(123);上面的語句就是調(diào)用Console類的中writeLine方法,輸出數(shù)字123。語句的結(jié)尾要用“;”結(jié)束,另外編寫程序時敲入的所有內(nèi)容,包括;等都是英文半角格式,不能出現(xiàn)中文格式的標點符號。4.2.6方法
回憶我們在1.1節(jié)中,創(chuàng)建的VS項目會自動創(chuàng)建一個.CS程序文件,文件中包含一個Main方法。這個Main就是一個方法,也可以稱之為函數(shù)。方法、語句、變量這三者的關(guān)系,我們可以這么理解,變量是一些螺絲,語句是有螺絲之類組成的小零件,而方法就是由零件和螺絲組成的工具。我們在使用工具之前要把工具先做好,這個制作工具的過程就是方法的定義。4.2.6方法
1、方法的定義。PublicVoidTool(){}
2、方法的參數(shù)。
PublicVoidTool(inti){}4.2.6方法3、方法的返回值。PublicintTool(inti){Returni+i;}4.2.6方法4、方法的使用。我們曾經(jīng)說方法可以看成一個工具,工具的定義就相當于工具的制作,工具制作出來只是放在那,并沒有使用,想要使用工具,就需要調(diào)用方法。調(diào)用寫法如下:方法名(實參);Tool(3);
類是一種數(shù)據(jù)結(jié)構(gòu),它可以封裝數(shù)據(jù)成員、方法成員和其他類。類是創(chuàng)建對象的模板,C#中所有的語句都必須位于類中,因此類也是C#語言的核心和基本構(gòu)成模塊。用我們之前的理解方式,如果說方法是工具的話,那么類就是一個工具箱,這個工具箱內(nèi)存放著屬于這個類別內(nèi)的各種工具。例如測量長度的類那么這個類里面放的都是進行測量長度的工具方法,測量重量的類那么存放的都測量重量的相關(guān)方法。任何新的類在使用之前它都需要定義,一個類一旦定義,就可以當做一個新的類型使用,在C#中用class來定義。4.2.7類
類是一種數(shù)據(jù)結(jié)構(gòu),它可以封裝數(shù)據(jù)成員、方法成員和其他類。類是創(chuàng)建對象的模板,C#中所有的語句都必須位于類中,因此類也是C#語言的核心和基本構(gòu)成模塊。用我們之前的理解方式,如果說方法是工具的話,那么類就是一個工具箱,這個工具箱內(nèi)存放著屬于這個類別內(nèi)的各種工具。例如測量長度的類那么這個類里面放的都是進行測量長度的工具方法,測量重量的類那么存放的都測量重量的相關(guān)方法。任何新的類在使用之前它都需要定義,一個類一旦定義,就可以當做一個新的類型使用,在C#中用class來定義。4.2.7類
我們在之前的內(nèi)容中提到了類這個概念,我們說類是一個工具箱,那么命名空間就是一個工具保管員,他的名下保管著很多的工具箱(也就是類),如果想調(diào)用某個工具箱,或者是工具箱下的方法,那么必須要通過工具保管員,程序的寫法就是是用“using命名空間名”,代碼如下using命名空間名;在C#中,程序是利用命名空間來組織起來的,命名空間是由一個個類組成,的,類是由一個個方法定義和變量定義組成的。方法是一個個語句組成的,語句是有變量和運算符、方法調(diào)用組成。4.2.8命名空間謝謝第四章開發(fā)語音
4.3.1流程控制語句我們現(xiàn)在所寫的程序代碼在執(zhí)行的過程中要按照一定的線性方向進行執(zhí)行,這期間一定會有節(jié)點需要我們做判斷和分支的,而流程控制語句就是執(zhí)行這類作用的。4.3程序語言基礎(chǔ)1、if二叉分支語句if語句是我們的程序中最基本的語句,通常我們學習程序?qū)W習的第一個語句就是if語句。使用if語句是,在語句后面的括號中要跟隨一個條件表達式,這個條件表達式的結(jié)果如果是true,則執(zhí)行運行{}中的內(nèi)容,如果是false則不執(zhí)行。if(布爾表達式){語句}if這個單詞的英文中是“如果”的意思,如上代碼的意思是如果條件為真,則執(zhí)行語句。4.3.1流程控制語句if(布爾表達式){語句A;}else{語句B;}if...else語句是if語句中最常用的一種形式,else的意思是“否則”,它根據(jù)條件的進行分支處理,就是說如果表達式結(jié)果為true那么執(zhí)行語句A,否則則執(zhí)行語句B。4.3.1流程控制語句if(布爾表達式1){語句1;}elseif(布爾表達式2){語句2;}else{執(zhí)行語句n;}if...elseif是多重分支語句,此類語句用于解決多重分支,if和else每次只能就行二叉分支,當布爾表達式1的值為true時,執(zhí)行語句1,如果false,則進行布爾表達式2的判斷,如果為true,則執(zhí)行語句2,為false則進行下面的判斷或語句,以此類推。4.3.1流程控制語句
switch則是用來處理多分支的語句。它根據(jù)表達式的值使程序從多個分支中選擇一個用于執(zhí)行的分支,if語句是每次遇到條件就一分為二的兩種情況,Switch就是遇到條件一分為多。例子如下:switch(表達式){case常量表達式1:語句1;break;case常量表達式2:語句2;break;...case常量表達式3:語句3;break;default:語句4;}4.3.1流程控制語句
switch關(guān)鍵字后面的()中是條件表達式,條件表達式的結(jié)果必須是bool型的值,注意是結(jié)果,也就是可以是個算式,例如6>4,其結(jié)果是正確的,是true,也可以是一個返回值為bool方法。將方法調(diào)用放入小括號中也是可以的。大括號{}中的代碼是由多個case子句組成的多個分支。每個case關(guān)鍵字后面都有對應語句塊,switch所執(zhí)行的功能是通過對條件表達式的判讀,根據(jù)得出的值到下面的case語句中找到相同的值,然后執(zhí)行該值對應的語句,語句執(zhí)行結(jié)束后,執(zhí)行break語句,break直接結(jié)束switch。default的意義是其他,如果條件表示式的值在case塊中沒有找到匹配的值,那么執(zhí)行default后面的語句。4.3.1流程控制語句
1.while語句while(條件表達式){語句1;}while在英文的意思“當....時”,在程序語句中的表示的意思就是,當條件表達式的值為true時,就一直執(zhí)行語句1,直到條件表達式值為false才結(jié)束。從語句格式上我們發(fā)現(xiàn)while的語法結(jié)構(gòu)和if的結(jié)構(gòu)很像,但是表示意思略有區(qū)別,if是條件表達式為true,則執(zhí)行一次語句1,while則是一直執(zhí)行語句1。在這里我們橫向比較一下能加深對語句的記憶。4.3.2循環(huán)語句2.do...while循環(huán)do{語句1;}while(條件表達式);do...while語句的執(zhí)行順序是先執(zhí)行一次語句1,然后之后判斷while中的條件表達式,如果是true,則反復執(zhí)行語句1,如果是false,不再執(zhí)行語句1,結(jié)束循環(huán)。do...while語句與while語句的最大的區(qū)別是,while是判讀再執(zhí)行,如果為false,則語句一次也不執(zhí)行。而do...while是先執(zhí)行一次,再判斷為false,則不執(zhí)行,也就是說while可能一次也不執(zhí)行語句,而do...while至少會執(zhí)行一次語句。4.3.2循環(huán)語句3.for循環(huán)for循環(huán)是程序語言中最有用的循環(huán)語句之一,for循環(huán)用于對一個有序的數(shù)據(jù)序列進行遍歷,其中有一個初始值,有一個條件值,有一個變化規(guī)律,這三個中用;分隔,各有各的用途,下面是for循環(huán)的語法結(jié)構(gòu)for(初始值;條件表達式;變化規(guī)律){語句1;}for的使用都針對一個數(shù)據(jù)序列的,初始值用來確定序列索引值,表明從序列的那個位置起始循環(huán)。條件表達式是一個bool表達式,用來判斷序列索引是否符合條件,如果索引不符合條件則結(jié)束循環(huán)。變化規(guī)律是指序列索引每次執(zhí)行后對索引值做怎樣的變化。值做怎樣的變化。4.3.2循環(huán)語句for(inti=0;i<3;i++){語句;}for語句的運行順序如下:第一遍運行的時候以索引初始值i=0,判讀條件,i=0,i<3,執(zhí)行語句1。執(zhí)行變化語句i++;也就是i自加1,此時i=1。第二遍i=1,判斷條件,i=1,i<3,執(zhí)行語句。i++,i=2。第三遍i=2,判斷條件,i=2,i<3,執(zhí)行語句。i++,i=3。第六遍i=3,判斷條件,i=3,i已經(jīng)不小于3了,條件不成立跳出循環(huán)。最終語句執(zhí)行3遍。4.3.2循環(huán)語句4.foreach循環(huán)foreach循環(huán)是for循環(huán)的一種特殊簡化方式。但foreach語句并不能完全取代for語句。然而foreach循環(huán)都可以改寫成for循環(huán)。foreach語句用于枚舉一個集合的內(nèi)容。用一個變量分別代替對該集合中的每個元素,用于對元素的調(diào)用的操作,foreach語句不能用于執(zhí)行更改集合元素的操作,否則會產(chǎn)生錯誤。foreach(變量類型變量in集合){語句;}要注意的是變量類型要和后面集合的類型保持一致,變量在每一次循環(huán)中分別代表集合中的一個元素,循環(huán)的次數(shù)和集合的個數(shù)是一致的。4.3.2循環(huán)語句5.循環(huán)跳轉(zhuǎn)語句(1)break語句,break語句只能應用在switch、while、do...while,for、foreach語句中,用于結(jié)束循環(huán)語句。(2)continue語句只能用于while、do...while,for、foreach語句中,用來忽略循環(huán)語句中當次循環(huán),而開始下一次的循環(huán)。(3)return語句表示返回,當return語句在方法中的時候,用于結(jié)束當前方法。如果當前方法有返回值,則該方法必須有return方法,且必須每個分支都由return來結(jié)束,并且return后面需要有和方法返回類型相同的值。4.3.2循環(huán)語句
集合是一些數(shù)據(jù)所組成的序列。在C#中有很多種數(shù)據(jù)集合方式。我們這里主要講數(shù)組。
數(shù)組元素的下標、索引或者ID;數(shù)組的長度;為了更好的理解數(shù)組,可以數(shù)組想象成軍隊的站隊,一維數(shù)組就是一路隊列,二維數(shù)組就是二路隊列,可以通過報數(shù)的形式遍歷每個隊員,也可以通過序號,直接找到序號對應的隊員。4.3.3集合和數(shù)組
1.一維數(shù)組一維數(shù)組實際上就是一個線性的數(shù)據(jù)集合,當程序中需要處理一組數(shù)據(jù)時就可以創(chuàng)建一個這種數(shù)據(jù)類型的數(shù)組。數(shù)組的定義可以使用一下幾種方式①數(shù)組類型[]數(shù)組名;②數(shù)組類型[]數(shù)組名=new數(shù)組類型[數(shù)組長度];③數(shù)組類型[]數(shù)組名={元素1,元素2,元素3,元素4};④數(shù)組類型[]數(shù)組名=new數(shù)組類型[3]{元素1,元素2,元素3};4.3.3集合和數(shù)組
①方法是最簡潔的定義方式,僅僅定義數(shù)組的類型和數(shù)組的名字。例如int[]nums;這就是定義了一個整數(shù)型數(shù)組,數(shù)組名叫nums。②方法是在定義數(shù)組類型和名字的同時給出的數(shù)組的長度。例如int[]nums=newint[4];這表示定義了一個長度為4的整數(shù)型數(shù)組,名字叫nums。
4.3.3集合和數(shù)組③方法是在定義數(shù)組類型和名字的同時,數(shù)組的元素賦值。這種方式雖然沒有直接給出數(shù)組的長度,但是通過元素的個數(shù)也是能知道數(shù)組的長度的,也相當于變相的給出了數(shù)組長度。例如int[]nums={3,4,6,4,6,1};這表示定義了一個整數(shù)型數(shù)組,數(shù)組的元素分別是3,4,6,4,6,1,數(shù)組長度為6,名字是nums。④方法是最完整的數(shù)組定義方式,例如int[]nums=newint[6]{3,4,6,4,6,1};4.3.3集合和數(shù)組
2.二維數(shù)組①int[,]nums;②int[][]n;③int[,]nums=newint[2,4];④int[,]nums=newint[2,4]{{3,4},{4,5},{4,5},{2,6}};⑤int[,]nums={{3,4},{4,5},{4,5},{2,6}};4.3.3集合和數(shù)組
3.常用數(shù)組命令(1)Sort排序Sort命令是Array類下的一個靜態(tài)方法,作用是可以把數(shù)組內(nèi)的元素按照由小到大的順序進行排序。使用方法如下:int[]list={3,5,7,6,8};Array.Sort(list);foreach(intiinlist){Console.Write(i+“;”);}4.3.3集合和數(shù)組(2)Reverse反轉(zhuǎn)Reverse命令是Array類下的一個靜態(tài)方法,作用是將數(shù)組內(nèi)的元素反向排列。使用方法如下:int[]list={3,5,7,6,8};Array.Reverse(list);foreach(intiinlist){Console.Write(i+“;”);}4.3.3集合和數(shù)組屬性是一種用于訪問對象或類的特性的成員,從使用上也可以按變量的方式使用,是一種可以進行訪問限制的變量,可以對訪問性進行設(shè)置。訪問修飾符數(shù)據(jù)類型屬性名{get{return變量名;}set{變量名=value;}}4.3.4屬性屬性是一種用于訪問對象或類的特性的成員,從使用上也可以按變量intMonth=12;publicintmonth{get{returnMonth;}set{if(value>0&&value<13){Month=value;}}}4.3.4屬性intMonth=12;publicintmonth{get{returnMonth;}}上面這個屬性的定義沒有set也就無法進行賦值,這個屬性就是一個可讀屬性,無法對屬性的數(shù)值進行修改。4.3.4屬性
在一個項目中會存在大量的類,有些類實現(xiàn)的功能不同,但很類似,這就是使程序中出現(xiàn)了大量重復的代碼,為了避免出現(xiàn)這樣問題,就有了對象這個概念。
什么是類?什么是對象?4.3.5對象對象的定義對象的定義,分為兩部分,一是聲明對象,也就是確定對象的類型和名字,二是實例化對象。(1)聲明對象:聲明變量是一樣的要符合變量命名的規(guī)則,假定我們已經(jīng)有了一個叫Fruit的類,下面就聲明了一個Fruit的類的對象fruit。代碼如下:Fruitfruit;從上面的代碼中我們可以看出,這和聲明變量是一樣的,但是變量類型是我們自己定義的各種類。4.3.5對象(2)實例化對象:聲明對象后,該對象并不能直接訪問,因為系統(tǒng)中還未為其分配存儲空間和值,只有通過實例化,相當于為變量賦初始值,才能真正完成定義。Fruitfruit=newFruit();如上代碼這才完成了對對象的定義。
我們定義的對象是不是就是在定義變量。我們用的都是引用類型,需要有具體的實例話,才能完成空間分配。變量在某種意義上說都是一種實例。值類型是不是也需要賦初值,其實不需要,值類型變量有默認初值,float和int型默認是0,bool是false,string是“”4.3.5對象classFruit(){publicintnum;Staticintn;publicvoidEat(){}StaticvoidMain(){Fruitfruit=newFruit();fruit.num=3;Fruit.Eat();Fruit.n=3;}4.3.5對象謝謝第五章虛擬現(xiàn)實1開發(fā)工具
UnityHub是Unity新推出的用于簡化工作流程的桌面應用程序,主要的作用是下載和使用多個版本的Unity軟件、試用UnityBeta甚至Alpha編輯器、管理當前機器上的Unity項目、學習界面和資源界面,方便查找教程和資源。5.1UnityHubUnity的主要分五個窗口,場景窗口(SceneView)、游戲窗口(GameView)、層級窗口(Hierarchy)、項目視圖(Project)、屬性窗口(Inspector)。5.2Unity的界面布局5.2.1場景窗口(SceneView)
場景視圖,是用于設(shè)置場景以及放置游戲?qū)ο?,是?gòu)造游戲場景的地方。5.2.2游戲窗口(GameView)游戲場景,是由場景中相機所渲染的游戲畫面,是游戲發(fā)布后玩家所能看到畫面。5.2.3層級窗口(Hierarchy)層級窗口,用于顯示當前場景中所有游戲?qū)ο蟮膶蛹夑P(guān)系。5.2.4項目視圖(Project)項目視圖:整個工程中所有可用的資源,例如模型、類等。5.2.5屬性窗口(Inspector)
屬性窗口:用來顯示當前所選擇的游戲?qū)ο蟮南嚓P(guān)屬性與信息。5.2.6Console(控制臺)
打印出來的提示語句都出現(xiàn)在Console視圖中,用白色字顯示。上面我們提到了紅色字和白色字,在Console視圖中還有一個種黃色字,黃色代表的是警告,表示代碼存在不合理的地方,但不是語法錯誤,也不影響程序的運行。變換工具,主要用于Scene窗口,實現(xiàn)所選擇的游戲?qū)ο蟮奈灰?、旋轉(zhuǎn)以及縮放等操作控制。手型工具,鼠標單擊選中手型工具,可在Scene視圖中按住鼠標左鍵來平移整個場景,選中手型工具后,在Scene視圖中先按住【Alt】鍵,按住鼠標左鍵,平移鼠標可以旋轉(zhuǎn)場景視角,選中手型工具后,在Scene視圖中先按住【Alt】鍵,按住鼠標右擊,平移鼠標可以縮放場景視角,此外使用鼠標滾輪也能縮放場景視角。5.2.7變換工具
移動工具,鼠標單擊移動工具后,選中一個物體,在該物體上出現(xiàn)3個方向的箭頭,代表是物體自身坐標系的三個坐標軸,通過在箭頭所指的方向上拖動物體從而改變物體某一軸向上位置。旋轉(zhuǎn)工具,鼠標單擊旋轉(zhuǎn)工具后,選中一個物體,在物體上出現(xiàn)了三種顏色的三個線圈,在線圈上安裝鼠標左鍵平移,則可以沿著對應的軸向旋轉(zhuǎn)物體??s放工具,鼠標單擊縮放工具后,選中一個物體,在該物體上出現(xiàn)3個方向的線段,通過在縮放所指的方向上拖動物體從而改變物體某一軸向上縮放。矩形工具,允許用戶查看和編輯2D或3D游戲?qū)ο蟮木匦问直?。對?D游戲?qū)ο螅梢园惭b【Shift】鍵進行等比例縮放。5.2.7變換工具
層級列表,用來控制游戲?qū)ο笤赟cene視圖中的顯示,在下拉列表中顯示狀態(tài)為的物體將被顯示在Scene視圖中。切換視圖的布局,用戶可以存儲自定義的界面布局5.2.8層級列表和下拉列表File菜單(文件),Edit菜單(編輯),Asset菜單(資源),GameObject菜單(游戲物體),Component菜單(組件),Windows菜單(窗口),Help菜單(幫助)5.2.9菜單欄謝謝第五章虛擬現(xiàn)實開發(fā)工具
在介紹Unity的組件之前,我們先介紹一下Unity的特有方法,也稱系統(tǒng)方法,是Unity語言類中獨有的方法,有以下特點:(1)特有方法不需要調(diào)用,滿足一定條件后會自動觸發(fā)。(2)特有方法會自動繼承,如果父類中有特有方法,子類沒有,那么子類自動繼承父類的特有方法,如果子類中有,則相當于重寫了該特有方法。5.3Unity的特有方法(1)Start(),開始方法。方法解析:特有方法,在類文件啟動的時候就執(zhí)行。(2)Awake(),覺醒方法。方法解析:特有方法,在類文件在場景實例的時候就執(zhí)行。Start和Awake在執(zhí)行效果上都是運行的瞬間就執(zhí)行,但是這二者從執(zhí)行順序上有區(qū)別,Awake在Start之前執(zhí)行,而且如果類的Enable屬性被關(guān)閉,也就是類非激活狀態(tài)下,Start方法是不執(zhí)行的,Awake方法依舊會執(zhí)行。(3)Update(),刷新方法方法解析:特有方法,每幀調(diào)用一次,用于更新游戲場景和狀態(tài)5.3.1類執(zhí)行相關(guān)特有方法(4)FixedUpdate(),物理刷新方法方法解析:特有方法,每個固定物理幀調(diào)用一次,用于物理狀態(tài)的更新(5)LateUpdate(),后刷新方法方法解析:特有方法,每幀調(diào)用一次,一般與相機相關(guān)的放到這里。(3)(4)(5)都是刷新方法,但在使用上略有不同,通常需要每幀更新的內(nèi)容都放在Update中,F(xiàn)ixedUpdate中一般放和物理更新相關(guān)的內(nèi)容,LateUpdate一般放相機相關(guān)的內(nèi)容,從執(zhí)行屬性上來說,F(xiàn)ixedUpdate先于Update,LateUpdate最后。
以上五個方法,執(zhí)行順序由先到后,分別是Awake、Start、FixedUpdate、Update、LateUpdate。5.3.1類執(zhí)行相關(guān)特有方法(6)OnEnable(),激活時執(zhí)行方法解析:特有方法,類所在物體由非激活變成激活狀態(tài)下執(zhí)行,如果物體是被新創(chuàng)建出來的可以執(zhí)行。(7)OnDisable(),非激活時執(zhí)行方法解析:特有方法,類所在物體由激活變成非激活狀態(tài)下執(zhí)行,如果物體是被銷毀的也可以執(zhí)行。(8)OnDestroy(),銷毀時執(zhí)行方法解析:特有方法,類所在物體被銷毀時執(zhí)行。5.3.1類執(zhí)行相關(guān)特有方法(9)OnApplicationQuit(),退出時執(zhí)行方法解析:特有方法,類所在進行退出程序的時候執(zhí)行。(10)OnBecameVisible(),顯示時執(zhí)行方法解析:特有方法,在物體顯示的時候執(zhí)行,這里的顯示指的是出現(xiàn)在攝像機顯示視角范圍內(nèi),可以在屏幕中顯示出來,能被看到。(11)OnBecameInvisible()不顯示時運行方法解析:特有方法,同理,此方法是在物體不顯示的時候執(zhí)行。5.3.1類執(zhí)行相關(guān)特有方法
鼠標相關(guān)的特有方法除了擁有特有方法的特點以外,還有一個特點就是只對當前方法所在類所掛載的物體起作用。(1)OnMouseEnter(),鼠標進入方法方法解析:當鼠標進入方法所在類所掛載的物體范圍內(nèi)是執(zhí)行。(2)OnMouseDown(),鼠標按下方法方法解析:當鼠標在物體上面并按下鼠標按鍵的時候執(zhí)行。(3)OnMouseUp(),鼠標抬起方法方法解析:當鼠標在物體上面并抬起鼠標按鍵的時候執(zhí)行。5.3.2鼠標相關(guān)特有方法(4)OnMouseOver(),鼠標懸停方法方法解析:當鼠標懸停在物體上面并按下鼠標的時候執(zhí)行,并一直執(zhí)行。(5)OnMouseExit(),鼠標離開方法方法解析:當鼠標離開在物體上面時執(zhí)行。(6)OnMouseDrag(),鼠標拖拽方法方法解析:當鼠標在物體上面,按住鼠標,并移動鼠標時執(zhí)行。以上方法中,OnMouseEnter方法和OnMouseOver方法執(zhí)行效果都是鼠標進入物體范圍就執(zhí)行,但Enter只在進入的瞬間執(zhí)行一次,而Over會反復執(zhí)行。5.3.2鼠標相關(guān)特有方法
碰撞相關(guān)特有方法分兩大類別(還有其他的暫時不討論),分別是碰撞檢測和觸發(fā)檢測,碰撞和觸發(fā)的區(qū)別會在講物理組件的時候詳細講解。(1)OnTriggerEnter(),觸發(fā)進入檢測語法結(jié)構(gòu):privatevoidOnTriggerEnter(Colliderother)方法解析:當發(fā)成觸發(fā)的瞬間執(zhí)行,執(zhí)行一次。Other為碰到的碰撞體。(2)OnTriggerStay(),觸發(fā)持續(xù)檢測語法結(jié)構(gòu):privatevoidOnTriggerStay(Colliderother)方法解析:當進入觸發(fā)時執(zhí)行,持續(xù)執(zhí)行。Other為碰到的碰撞體。5.3.3碰撞相關(guān)特有方法(3)OnTriggerExit(),觸發(fā)離開檢測語法結(jié)構(gòu):privatevoidOnTriggerExit(Colliderother)方法解析:當觸發(fā)結(jié)束瞬間執(zhí)行,執(zhí)行一次。Other為碰到的碰撞體。(4)OnCollisionEnter(),碰撞發(fā)生檢測語法結(jié)構(gòu):privatevoidOnCollisionEnter(Collidsioncollision)方法解析:當發(fā)生碰撞瞬間執(zhí)行,執(zhí)行一次。collision為碰撞事件。5.3.3碰撞相關(guān)特有方法(5)OnCollisionStay(),碰撞持續(xù)方法語法結(jié)構(gòu):privatevoidOnCollisionStay(Collidsioncollision)方法解析:當發(fā)生碰撞,且處于接觸狀態(tài)時執(zhí)行,反復執(zhí)行。collision為碰撞事件。(6)OnCollisionExit(),碰撞離開方法語法結(jié)構(gòu):privatevoidOnCollisionExit(Collidsioncollision)方法解析:當結(jié)束碰撞時執(zhí)行,執(zhí)行一次。collision為碰撞事件。5.3.3碰撞相關(guān)特有方法
Unity的組件就是Unity官方封裝好的代碼文件,用來方便我們開發(fā)內(nèi)容的工具,也是一個代碼和我們自己寫的代碼從使用的方法上來說沒有任何區(qū)別,對于一些初學者要記住的一句話就是“組件就是代碼”,怎么從我們自己的代碼文件中獲得變量和方法,同樣就方法可以應用到組件上,同理組件掛載到物體上,在屬性面板中顯示的內(nèi)容,也就都可以獲取和更改(也有特殊情況,暫不考慮)。5.4Unity組件
在unity環(huán)境中,我們可以利用系統(tǒng)自帶的地形系統(tǒng),制作符合我們需要的地形。在Herarchy窗口內(nèi)鼠標單擊Create下拉菜單,在3DObject選項卡中選擇Terrain,也可以在Herarchy窗口下鼠標右擊,在彈出的窗口的3DObject選項卡中選擇Terrain,選擇Terrain后在Inspector(屬性)面板中查看對應的屬性。5.4.1地形插件
在彈出的窗口中有五個子按鈕,鼠標單擊按鈕,彈出新的面板,在面板中可以設(shè)置地形的寬度、地形的長度和高度。地形高度這個值的設(shè)置決定整個地形最大高度,也可以在編輯完地形之后再調(diào)整,調(diào)整之后會根據(jù)山脈的高度按比例縮放。5.4.1地形插件2.編輯地形(1)RaiseorLowerTerrian(上升下降地形);(2)PointTexture(添加紋理);(3)SetHeight(設(shè)置高度);(4)SmoothHeight(光滑山體);(5)StampTerrian。上升地形(地形圖章工具);5.4.1地形插件2.植樹BrushSize(筆刷尺寸),調(diào)整批量種植的面積;TreeDensity(樹的密度)可以調(diào)整種植面積內(nèi)的樹的數(shù)量;TreeHeight(樹的高度)調(diào)整樹的高度;LockWidth(鎖定樹的寬高比);TreeWidth(樹的寬度);5.4.1地形插件
設(shè)置樹的預制體,通過鼠標單擊,在下拉菜單中選中AddTree,會彈出一個窗口,為TreePrefab選擇一個樹的模型,通過鼠標單擊或者鼠標涂抹將選中的樹按照之前的設(shè)置批量種植到所編輯地形中。5.4.1地形插件
4.種草種草的原理和種樹的原理基本相同,但是用的樹和草的物體是不一樣的,樹是用模型預制體,但草用的是圖片。草如果用的比較多,比較消耗系統(tǒng)資源。在這個窗口可以設(shè)置,草的最小寬度、最大寬度、小高度、最大高度,隨機偏差值、健康的草的顏色、枯萎的草的顏色。主要設(shè)置(細節(jié)紋理),為其選擇草的圖片。按照之前的設(shè)置批量種植到所編輯地形中。5.4.1地形插件設(shè)置風的力度,在場景中可以設(shè)置風的力度,讓草隨風擺動,風的設(shè)置在地形組件的設(shè)置中,鼠標單擊,WindSettingsforGrass(影響草的風設(shè)置),通過這些設(shè)置調(diào)整風力的大小5.4.1地形插件5.添加水面效果在Unity的早期版本中會附帶一個資源包,里面包含了一些常用素材,里面包含了自然場景包、效果素材包、粒子效果包、2D素材、角色控制等。在Unity新的版本中資源包整合到Hub的學習模塊中的資源里面。我們要用的水面效果就在Environment(環(huán)境資源包)文件夾中,這里面包含了兩種水的效果Water和Water(Basic),前者效果水更清澈透明,后者水的顏色更藍,透明度相對較低。拖入到場景中即可。5.4.1地形插件6.添加霧效在Unity中還可以為環(huán)境添加霧的效果,添加方法非常簡單,首先需要打開對應的窗口,在上面菜單欄中選擇Window,再選擇Rendering,選擇LightingSettings,彈出Lighting窗口,找到OtherSetting窗口,勾選Fog。5.4.1地形插件謝謝第五章虛擬現(xiàn)實開發(fā)工具
Unity的音頻系統(tǒng)所支持的格式有很多有Ogg、AIFF、Wav、Mp3等,最常用格式是Wav、Mp3,Wav格式文件較大,不需要解碼,Mp3文件相對較小,但是需要解碼器。Unity的音頻系統(tǒng)包含很多小的組件,最常用兩個組件是AudioListener和AudioSource。5.4.2音頻系統(tǒng)1.AudioListener(音頻偵聽器)從字面上理解就是“聲音傾聽者”,用來傾聽場景中的聲音,通常場景中只需要一個AudioListener,在Camera物體上會自帶一個AudioListener,當場景中多建一個Camera。此時應刪除一個,使場景中的聲音監(jiān)聽器保持一個。
什么是組件?組件就是代碼程序,和我們自己寫的代碼沒有什么不同,組件只不過被系統(tǒng)進行了封裝,對組件的引用、對組件的公共變量的調(diào)用和調(diào)用自己寫的代碼中的變量是一樣的。也是就是我們的代碼怎么用,對組件就怎么用。5.4.2音頻系統(tǒng)2.AudioSource從字面上理解就是“聲音來源”,用來發(fā)聲,Unity中的聲音分為兩種,一個3D聲音,一個是2D聲音,3D聲音就是完全模擬現(xiàn)實世界中的聲音,Unity是一款3D游戲引擎,任何游戲最根本都是一個模擬的過程,當然也要模擬聲音,現(xiàn)實世界的聲音的特點是隨著距離的增加音量會衰減。也就是說離聲源越遠聽到的聲音越小。而2D聲音則不會發(fā)生衰減。5.4.2音頻系統(tǒng)
在AudioSource組件下有很多公共屬性,下面我們依次講解這些屬性的意義。AudioClip是一個類,表示的意思是聲音片段,可以理解成是一個聲音文件,拖拽到這個變量對應的窗口中。但如果在代碼中調(diào)用這個變量的時候,要調(diào)用的變量名字是clip,而不是AudioClip。Mute:靜音。PlayOnAwake:喚醒時播放。Loop:循環(huán)。Volume:音量。5.4.2音頻系統(tǒng)
3.其他組件Audio組件還有一些組件的多是混音器,用來調(diào)整聲音輸出效果。AudioReverbZone:音頻混響。AudioLowPassFilter:音頻低通濾波器。AudioHighPassFilter:音頻高通濾波器。AudioEchoFilter:音頻回聲濾波器。AudioDistortionFilter:音頻是真濾波器。AudioReverbFilter:音頻混響濾波器。AudioChorusFilter:音頻合生濾波器。5.4.2音頻系統(tǒng)
4.Audio類常用的代碼方法(1)Play(),播放音頻。語法結(jié)構(gòu):publicvoidPlay()所屬類:AudioSource;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)該AudioSource實例的播放。例子:AudioSourceas=newAudioSource();//創(chuàng)建AudioSource實例。as.Play();//as實例開始播放。
以下實例統(tǒng)一用as表示AudioSource類變量,用來存放AudioSource實例,不再單獨定義。5.4.2音頻系統(tǒng)(2)Stop(),停止音頻。語法結(jié)構(gòu):publicvoidStop();所屬類:AudioSource;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)該AudioSource實例的停止。再次播放是從頭開始播放。例子:as.Stop();//as實例停止。5.4.2音頻系統(tǒng)(3)Pause(),暫停音頻。語法結(jié)構(gòu):publicvoidPause();所屬類:AudioSource;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)該AudioSource實例的暫停。再次播放是從暫停的地方播放。例子:as.Pause();//as實例暫停。5.4.2音頻系統(tǒng)(4)PlayOneShot(),播放一次。語法結(jié)構(gòu):publicvoidPlayOneShot(AudioClipclip);所屬類:AudioSource;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)AudioSource實例的一次播放。該方法包含一個參數(shù),參數(shù)是要 播放的音頻。該方法有一個重載方法,包含兩個參數(shù),除了上面說的那個外,還有個float的參數(shù),目的是控制播放音量,如果不填,默認值為1;例子:as.PlayOneShot(聲音變量);as.PlayOneShot(聲音變量,1);5.4.2音頻系統(tǒng)(5)PlayClipAtPoint(),在場景中的某點坐標播放聲音。語法結(jié)構(gòu):publicstaticvoidPlayClipAtPoint(AudioClipclip,Vector3position);所屬類:AudioSource;方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。調(diào)用時不需要AudioSource實例的一次播放。該方法包含兩個參數(shù),第一個參數(shù)是要播放的聲音,第二個參數(shù)是聲源坐標。例子:AudioSource.PlayClipAtPoint(聲音變量名,newVector3(1,1,1));//在坐標1.1.1的點播放聲音。5.4.2音頻系統(tǒng)謝謝第五章虛擬現(xiàn)實開發(fā)工具4
Unity的軟件是一款非常優(yōu)秀的游戲引擎,其中一個原因就是Unity為開發(fā)游戲提供了很大的便利,其中物理系統(tǒng)就是一個非常方便的工具,可以想象制作任何一款游戲,都離不開物體之間的物理響應,從而使游戲?qū)ο蟊憩F(xiàn)出與現(xiàn)實相似的各種物理行為。Unity中內(nèi)置了兩種獨立的物理引擎,分別是3D物理引擎和2D物理引擎。這兩種物理引擎使用方法非常相似,只是使用的組件不一樣,Rigidbody和Rigidbody2D。5.4.3物理系統(tǒng)1.RigidBody(剛體)組件物體系統(tǒng)中的RigidBody組件為物體提供是物理屬性,組件Collider提供的物理輪廓,通常這兩個組件Collider組合使用,才能達到現(xiàn)實中物體的物理效果。Mass:質(zhì)量。Drag:阻力。AngularDrag:角阻力。UseGravity:使用重力。5.4.3物理系統(tǒng)IsKinemaic:是否開啟動力學。Interpolate:插值,用于控制剛體運動的抖動情況,包含三個子項分別是None(沒有插值)、Interpolate(內(nèi)插值,基于前一幀的值來平滑)、Extrapolate(外插值,基于后一幀的值來平滑)。5.4.3物理系統(tǒng)CollisionDetection:碰撞檢測。包括四個子項Discrete(離線碰撞檢測,用兩個速度較慢的對象的碰撞檢測,消耗資源最低)Continuous(連續(xù)碰撞檢測,適用于一個快速對象和較慢的對象的檢測,消耗資源較低)ContinuousDynamic(連續(xù)動態(tài)碰撞檢測,適用于兩個快速的物體間的檢測,消耗資源較高)Continuousspeculative(連續(xù)預判性檢測)5.4.3物理系統(tǒng)Constraints:約束,用來控制物體對碰撞所產(chǎn)生的運動約束。FreezePosition:凍結(jié)位置,能禁止物體沿世界坐標系的三個方向的位移。FreezeRotation:凍結(jié)旋轉(zhuǎn),能禁止物體沿世界坐標系的三個方向的旋轉(zhuǎn)。5.4.3物理系統(tǒng)2.Collider組件Collider組件,俗稱碰撞器,碰撞器也分為兩類3D碰撞器和2D碰撞器。和剛體一樣,這兩種碰撞器都相似,以下我們只討論3D碰撞器。剛體可以讓物體在物理影響下運動。但是如果要讓兩個物體發(fā)生碰撞后的物理效果,就必須再為它們加上碰撞器,兩個對象有碰撞體時物理引擎才會計算碰撞,在物理模擬中,沒有碰撞體的剛體會彼此相互穿過。而物體能產(chǎn)生碰撞的輪廓就是由碰撞器提供的。
物體發(fā)生碰撞的必要條件:兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。5.4.3物理系統(tǒng)
在unity3d中,能檢測碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器。
碰撞器是觸發(fā)器的載體,而觸發(fā)器只是碰撞器身上的一個屬性。
當IsTrigger=false時,碰撞器根據(jù)物理引擎引發(fā)碰撞,產(chǎn)生碰撞的效果,可以調(diào)用OnCollisionEnter/Stay/Exit方法;當IsTrigger=true時,碰撞器就變成了觸發(fā)器,沒有碰撞效果,可以調(diào)用OnTriggerEnter/Stay/Exit方法(關(guān)于這幾個方法的使用在之前的特有方法中有使用方法)。如果要檢測一個物體是否經(jīng)過空間中的某個區(qū)域這時就可以用到觸發(fā)器。5.4.3物理系統(tǒng)
(1)碰撞器的類型BoxCollider(盒子碰撞器);
SphereCollider(球形碰撞器);
CapsuleCollider(膠囊體碰撞器);
MeshCollider(網(wǎng)格碰撞器);
WheelCollider(車輪碰撞器);5.4.3物理系統(tǒng)
(2)其它物理組件物理系統(tǒng)所包含的組件很多,下面僅簡單描述各個組件的名稱及作用,具體用法不在贅述。Cloth布料組件;HingeJoint鉸鏈關(guān)節(jié);FixedJoint固定關(guān)節(jié);SpringJoint彈簧關(guān)節(jié);CharacterJoint角色關(guān)節(jié);ConfigurableJoint;ConstantForce物理力場;5.4.3物理系統(tǒng)剛體類中除了下面要講到的方法,還有很多屬性變量,這些變量在上面提到的面板中都有講過,可以通過調(diào)取實例屬性的方式調(diào)取,此處不再贅述。(1)AddForce(),添加力。語法結(jié)構(gòu):publicvoidAddForce(Vector3force)所屬類:Rigidbody;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)該Rigidbody實例添加一個力,力的方向沿著向量force的方向,力的大小為force的模。剛體類常用的代碼方法例子:Rigidbodyr=newRigidbody();//創(chuàng)建Rigidbody實例。r.AddForce(transform.forward);//給r添加一個沿自身前方向移動的力,力的大小是1。以下實例統(tǒng)一用r表示Rigidbody類變量,用來存放Rigidbody實例,不再單獨定義。AddForce是重載方法,其他重載方法如下:publicvoidAddForce(Vector3force,ForceModemode);publicvoidAddForce(floatx,floaty,floatz);publicvoidAddForce(floatx,floaty,floatz,ForceModemode);x、y、z的參數(shù)是將向量force三個分量分別寫出來。剛體類常用的代碼方法(2)AddForceAtPosition(),添加點作用力。語法結(jié)構(gòu):publicvoidAddForceAtPosition(Vector3force,Vector3position)所屬類:Rigidbody;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)該Rigidbody實例的一個位置點添加一個力,力的方向沿著參數(shù)向量force的方向,力的大小為force的模,position是力的作用點。例子:r.AddForceAtPosition(transform.forward,newVector3(1,1,1,));//給r添加一個沿自身前方向移動的力,力的大小是1,作用點在坐標1,1,1的位置。剛體類常用的代碼方法(3)AddExplosionForce(),添加爆炸力語法結(jié)構(gòu):publicvoidAddExplosionForce(floatexplosionForce, Vector3explosionPosition,floatexplosionRadius);方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)在世界坐標下的產(chǎn)生一個力,力的位置參照explosionPosition,力的位置可以在物體輪廓之外,力的大小依照explosionForce,力的作用范圍半徑explosionRadius,方法內(nèi)部可以根據(jù)力的大小、位置、范圍計算力的對物體產(chǎn)生的影響。所屬類:Rigidbody;例子:r.AddExplosionForce(10,newVector3(1,1,1),20);//在世界坐標系下1,1,1的點產(chǎn)生一個力,力的大小為10,力的作用范圍是20。剛體類常用的代碼方法(4)AddTorque(),添加扭矩。語法結(jié)構(gòu):publicvoidAddTorque(Vector3torque);所屬類:Rigidbody;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。對實例對象添加一個扭矩,實例將以自身中心點為中心,參數(shù)torque方向為軸向旋轉(zhuǎn),,旋轉(zhuǎn)速度為參數(shù)向量的模長。例子:r.AddTorque(newVector3(1,1,1));//實例r以自身中心點為中心,向量1,1,1為方向為軸旋轉(zhuǎn),旋轉(zhuǎn)速度為1,剛體類常用的代碼方法(5)SweepTest(),檢測第一個碰撞器。語法結(jié)構(gòu):publicboolSweepTest(Vector3direction,outRaycastHit hitInfo);所屬類:Rigidbody;方法解析:實例方法,需要用實例.的形式調(diào)用該方法。該方法用來檢測以實例中心為起點,沿著參數(shù)Direction的方向上是否有碰撞器,該方法有返回值,返回一個bool值,true表示檢測到碰撞器,false表示沒有檢測到碰撞器。該方法中有一個outRaycastHithitInfo參數(shù),RaycastHit是一個射線碰撞信息類,用來保存射線碰撞物體所產(chǎn)生的信息,里面包含所碰到的物體,碰撞點的坐標等。剛體類常用的代碼方法
關(guān)鍵字out的意思是可以在方法內(nèi)部對參數(shù)變量進行更改,這么做的目的一般是因為我們需要一個方法返回兩個有用的數(shù)據(jù),但是利用常規(guī)的return方法只能返回一個數(shù)據(jù),所以需要使用out來返回第二個返回值。例如當前SweepTest方法,會返回一個是否碰撞到碰撞器的bool值,還會out出對應的碰撞器的碰撞信息。該方法的檢測只檢測碰到的第一個碰撞器,檢測到第一個,方法即結(jié)束。例子:r.SweepTest(transform.forward,outRaycastHithitInfo);//檢測實例r的前方向是否有碰撞器,如果有則返回true,并將產(chǎn)生的碰撞的信息存入變量hitInfo中,如果沒有則返回false。剛體類常用的代碼方法
(6)SweepTestAll(),檢測所有碰撞器語法結(jié)構(gòu):publicRaycastHit[]SweepTestAll(Vector3direction,out RaycastHithitInfo);所屬類:Rigidbody;方法解析:SweepTestAll方法和SweepTest方法類似,區(qū)別在于SweepTest只檢測碰到的第一個碰撞器,而SweepTestAll方法獲取碰撞的所有碰撞器。剛體類常用的代碼方法
物理管理器:在物理管理器中可以設(shè)置場景中所有物理效果的一些參數(shù),例如:重力加速度,反彈力等等。物理管理器所設(shè)置的是世界的物理屬性,剛體所設(shè)置的是物體自身的物理屬性。物理管理器通過Edit菜單→ProjectSettings→Physics找到。物理面列舉了部分參數(shù)的意思,通常這個面板最常用的是物理的重力效果。Gravity:重力,重力加速度。DefaultMaterial物理材質(zhì)用于調(diào)整摩擦力和碰撞單位之間的反彈效果。Bouncethreshold反彈值,速度小于這個值的時候,就不再反彈。Sleepthreshold休眠值,當速度小于這個值,則靜止。4.物理管理器
Physics類是Unity中個處理物理相關(guān)功能的類,里面包含了全局物理屬性和輔助方法,該類下的方法和屬性都是靜態(tài),下面我們依次講解。(1)gravity,檢測所有碰撞器語法結(jié)構(gòu):publicstaticVector3gravity{get;set;}所屬類:Physics;方法解析:場景重力加速度。5.物理類常用的代碼方法(2)RayCast,射線碰撞檢測語法結(jié)構(gòu):publicstaticboolRaycast(Rayray,outRaycastHithitInfo);所屬類:Physics;方法解析:射線檢測。使用方法和RigidBody類下的SweepTest相似,方法會有一個返回值,如果射線碰到物體則返回true否則返回false,ray為是需要檢測的射線,hitInfo是碰撞信息,該方法有多個重載方法,maxDistance是射線長度,layerMask層號,通過這個內(nèi)容,可以對控制射線只對某一層進行碰撞檢測。5.物理類常用的代碼方法(3)RaycastAll,射線碰撞檢測語法結(jié)構(gòu):publicstaticRaycastHit[]RaycastAll(Rayray);所屬類:Physics;方法解析:射線全部碰撞檢測。該方法和RigidBody類下的SweepTestAll相似,返回一個碰撞信息數(shù)組,將所有碰到的物體的碰撞信息都放到這個數(shù)組中。ray是需要檢測的射線,maxDistance是射線長度,layerMask需要進行碰撞檢測的層號。除了射線檢測,還有LineCast線段檢測,和射線方法基本相同,BoxCast盒子射線檢測,和射線方法類似,不過發(fā)射出去的是一個Box的圖形,而不是一條線,SphereCast球形
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024機械設(shè)備的購銷合同范本
- 二零二五版1209兩人共同投資智能家居系統(tǒng)集成合同3篇
- 2024法院簽的離婚協(xié)議算不算離婚
- 2024汽車制造技術(shù)與專利許可合同
- 二零二五版吊車租賃合同安全教育與培訓協(xié)議3篇
- 2025年度市政設(shè)施改造出渣承包管理協(xié)議3篇
- 二零二五年度醫(yī)藥產(chǎn)品鋪貨與區(qū)域分銷合同3篇
- 西南政法大學《無機材料合成與制備》2023-2024學年第一學期期末試卷
- 二零二五版LNG液化天然氣運輸船舶改造合同3篇
- 武漢鐵路職業(yè)技術(shù)學院《教師職業(yè)規(guī)劃與就業(yè)指導》2023-2024學年第一學期期末試卷
- 2025年中國高純生鐵行業(yè)政策、市場規(guī)模及投資前景研究報告(智研咨詢發(fā)布)
- 2022-2024年浙江中考英語試題匯編:完形填空(學生版)
- 2025年廣東省廣州市荔灣區(qū)各街道辦事處招聘90人歷年高頻重點提升(共500題)附帶答案詳解
- 中試部培訓資料
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網(wǎng)2025亞冬會營銷方案
- 北師大版數(shù)學三年級下冊豎式計算題100道
- 計算機網(wǎng)絡(luò)技術(shù)全套教學課件
- 屋頂分布式光伏發(fā)電項目施工重點難點分析及應對措施
- 廚房的管理流程與制度及廚房崗位工作流程
- 鐵路危險源辨識
評論
0/150
提交評論