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