虛擬現(xiàn)實開發(fā)基礎(chǔ)及實例 課件 第5章 虛擬現(xiàn)實開發(fā)工具_第1頁
虛擬現(xiàn)實開發(fā)基礎(chǔ)及實例 課件 第5章 虛擬現(xiàn)實開發(fā)工具_第2頁
虛擬現(xiàn)實開發(fā)基礎(chǔ)及實例 課件 第5章 虛擬現(xiàn)實開發(fā)工具_第3頁
虛擬現(xiàn)實開發(fā)基礎(chǔ)及實例 課件 第5章 虛擬現(xiàn)實開發(fā)工具_第4頁
虛擬現(xiàn)實開發(fā)基礎(chǔ)及實例 課件 第5章 虛擬現(xiàn)實開發(fā)工具_第5頁
已閱讀5頁,還剩212頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第五章虛擬現(xiàn)實1開發(fā)工具

UnityHub是Unity新推出的用于簡化工作流程的桌面應(yīng)用程序,主要的作用是下載和使用多個版本的Unity軟件、試用UnityBeta甚至Alpha編輯器、管理當(dāng)前機器上的Unity項目、學(xué)習(xí)界面和資源界面,方便查找教程和資源。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)層級窗口,用于顯示當(dāng)前場景中所有游戲?qū)ο蟮膶蛹夑P(guān)系。5.2.4項目視圖(Project)項目視圖:整個工程中所有可用的資源,例如模型、類等。5.2.5屬性窗口(Inspector)

屬性窗口:用來顯示當(dāng)前所選擇的游戲?qū)ο蟮南嚓P(guān)屬性與信息。5.2.6Console(控制臺)

打印出來的提示語句都出現(xiàn)在Console視圖中,用白色字顯示。上面我們提到了紅色字和白色字,在Console視圖中還有一個種黃色字,黃色代表的是警告,表示代碼存在不合理的地方,但不是語法錯誤,也不影響程序的運行。變換工具,主要用于Scene窗口,實現(xiàn)所選擇的游戲?qū)ο蟮奈灰?、旋轉(zhuǎn)以及縮放等操作控制。手型工具,鼠標(biāo)單擊選中手型工具,可在Scene視圖中按住鼠標(biāo)左鍵來平移整個場景,選中手型工具后,在Scene視圖中先按住【Alt】鍵,按住鼠標(biāo)左鍵,平移鼠標(biāo)可以旋轉(zhuǎn)場景視角,選中手型工具后,在Scene視圖中先按住【Alt】鍵,按住鼠標(biāo)右擊,平移鼠標(biāo)可以縮放場景視角,此外使用鼠標(biāo)滾輪也能縮放場景視角。5.2.7變換工具

移動工具,鼠標(biāo)單擊移動工具后,選中一個物體,在該物體上出現(xiàn)3個方向的箭頭,代表是物體自身坐標(biāo)系的三個坐標(biāo)軸,通過在箭頭所指的方向上拖動物體從而改變物體某一軸向上位置。旋轉(zhuǎn)工具,鼠標(biāo)單擊旋轉(zhuǎn)工具后,選中一個物體,在物體上出現(xiàn)了三種顏色的三個線圈,在線圈上安裝鼠標(biāo)左鍵平移,則可以沿著對應(yīng)的軸向旋轉(zhuǎn)物體??s放工具,鼠標(biāo)單擊縮放工具后,選中一個物體,在該物體上出現(xiàn)3個方向的線段,通過在縮放所指的方向上拖動物體從而改變物體某一軸向上縮放。矩形工具,允許用戶查看和編輯2D或3D游戲?qū)ο蟮木匦问直?。對?D游戲?qū)ο?,可以安裝【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)特有方法會自動繼承,如果父類中有特有方法,子類沒有,那么子類自動繼承父類的特有方法,如果子類中有,則相當(dāng)于重寫了該特有方法。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)特有方法

鼠標(biāo)相關(guān)的特有方法除了擁有特有方法的特點以外,還有一個特點就是只對當(dāng)前方法所在類所掛載的物體起作用。(1)OnMouseEnter(),鼠標(biāo)進入方法方法解析:當(dāng)鼠標(biāo)進入方法所在類所掛載的物體范圍內(nèi)是執(zhí)行。(2)OnMouseDown(),鼠標(biāo)按下方法方法解析:當(dāng)鼠標(biāo)在物體上面并按下鼠標(biāo)按鍵的時候執(zhí)行。(3)OnMouseUp(),鼠標(biāo)抬起方法方法解析:當(dāng)鼠標(biāo)在物體上面并抬起鼠標(biāo)按鍵的時候執(zhí)行。5.3.2鼠標(biāo)相關(guān)特有方法(4)OnMouseOver(),鼠標(biāo)懸停方法方法解析:當(dāng)鼠標(biāo)懸停在物體上面并按下鼠標(biāo)的時候執(zhí)行,并一直執(zhí)行。(5)OnMouseExit(),鼠標(biāo)離開方法方法解析:當(dāng)鼠標(biāo)離開在物體上面時執(zhí)行。(6)OnMouseDrag(),鼠標(biāo)拖拽方法方法解析:當(dāng)鼠標(biāo)在物體上面,按住鼠標(biāo),并移動鼠標(biāo)時執(zhí)行。以上方法中,OnMouseEnter方法和OnMouseOver方法執(zhí)行效果都是鼠標(biāo)進入物體范圍就執(zhí)行,但Enter只在進入的瞬間執(zhí)行一次,而Over會反復(fù)執(zhí)行。5.3.2鼠標(biāo)相關(guān)特有方法

碰撞相關(guān)特有方法分兩大類別(還有其他的暫時不討論),分別是碰撞檢測和觸發(fā)檢測,碰撞和觸發(fā)的區(qū)別會在講物理組件的時候詳細(xì)講解。(1)OnTriggerEnter(),觸發(fā)進入檢測語法結(jié)構(gòu):privatevoidOnTriggerEnter(Colliderother)方法解析:當(dāng)發(fā)成觸發(fā)的瞬間執(zhí)行,執(zhí)行一次。Other為碰到的碰撞體。(2)OnTriggerStay(),觸發(fā)持續(xù)檢測語法結(jié)構(gòu):privatevoidOnTriggerStay(Colliderother)方法解析:當(dāng)進入觸發(fā)時執(zhí)行,持續(xù)執(zhí)行。Other為碰到的碰撞體。5.3.3碰撞相關(guān)特有方法(3)OnTriggerExit(),觸發(fā)離開檢測語法結(jié)構(gòu):privatevoidOnTriggerExit(Colliderother)方法解析:當(dāng)觸發(fā)結(jié)束瞬間執(zhí)行,執(zhí)行一次。Other為碰到的碰撞體。(4)OnCollisionEnter(),碰撞發(fā)生檢測語法結(jié)構(gòu):privatevoidOnCollisionEnter(Collidsioncollision)方法解析:當(dāng)發(fā)生碰撞瞬間執(zhí)行,執(zhí)行一次。collision為碰撞事件。5.3.3碰撞相關(guān)特有方法(5)OnCollisionStay(),碰撞持續(xù)方法語法結(jié)構(gòu):privatevoidOnCollisionStay(Collidsioncollision)方法解析:當(dāng)發(fā)生碰撞,且處于接觸狀態(tài)時執(zhí)行,反復(fù)執(zhí)行。collision為碰撞事件。(6)OnCollisionExit(),碰撞離開方法語法結(jié)構(gòu):privatevoidOnCollisionExit(Collidsioncollision)方法解析:當(dāng)結(jié)束碰撞時執(zhí)行,執(zhí)行一次。collision為碰撞事件。5.3.3碰撞相關(guān)特有方法

Unity的組件就是Unity官方封裝好的代碼文件,用來方便我們開發(fā)內(nèi)容的工具,也是一個代碼和我們自己寫的代碼從使用的方法上來說沒有任何區(qū)別,對于一些初學(xué)者要記住的一句話就是“組件就是代碼”,怎么從我們自己的代碼文件中獲得變量和方法,同樣就方法可以應(yīng)用到組件上,同理組件掛載到物體上,在屬性面板中顯示的內(nèi)容,也就都可以獲取和更改(也有特殊情況,暫不考慮)。5.4Unity組件

在unity環(huán)境中,我們可以利用系統(tǒng)自帶的地形系統(tǒng),制作符合我們需要的地形。在Herarchy窗口內(nèi)鼠標(biāo)單擊Create下拉菜單,在3DObject選項卡中選擇Terrain,也可以在Herarchy窗口下鼠標(biāo)右擊,在彈出的窗口的3DObject選項卡中選擇Terrain,選擇Terrain后在Inspector(屬性)面板中查看對應(yīng)的屬性。5.4.1地形插件

在彈出的窗口中有五個子按鈕,鼠標(biāo)單擊按鈕,彈出新的面板,在面板中可以設(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è)置樹的預(yù)制體,通過鼠標(biāo)單擊,在下拉菜單中選中AddTree,會彈出一個窗口,為TreePrefab選擇一個樹的模型,通過鼠標(biāo)單擊或者鼠標(biāo)涂抹將選中的樹按照之前的設(shè)置批量種植到所編輯地形中。5.4.1地形插件

4.種草

種草的原理和種樹的原理基本相同,但是用的樹和草的物體是不一樣的,樹是用模型預(yù)制體,但草用的是圖片。草如果用的比較多,比較消耗系統(tǒng)資源。在這個窗口可以設(shè)置,草的最小寬度、最大寬度、小高度、最大高度,隨機偏差值、健康的草的顏色、枯萎的草的顏色。主要設(shè)置(細(xì)節(jié)紋理),為其選擇草的圖片。按照之前的設(shè)置批量種植到所編輯地形中。5.4.1地形插件

設(shè)置風(fēng)的力度,在場景中可以設(shè)置風(fēng)的力度,讓草隨風(fēng)擺動,風(fēng)的設(shè)置在地形組件的設(shè)置中,鼠標(biāo)單擊,WindSettingsforGrass(影響草的風(fēng)設(shè)置),通過這些設(shè)置調(diào)整風(fēng)力的大小5.4.1地形插件5.添加水面效果

在Unity的早期版本中會附帶一個資源包,里面包含了一些常用素材,里面包含了自然場景包、效果素材包、粒子效果包、2D素材、角色控制等。在Unity新的版本中資源包整合到Hub的學(xué)習(xí)模塊中的資源里面。我們要用的水面效果就在Environment(環(huán)境資源包)文件夾中,這里面包含了兩種水的效果Water和Water(Basic),前者效果水更清澈透明,后者水的顏色更藍,透明度相對較低。拖入到場景中即可。5.4.1地形插件6.添加霧效在Unity中還可以為環(huán)境添加霧的效果,添加方法非常簡單,首先需要打開對應(yīng)的窗口,在上面菜單欄中選擇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,當(dāng)場景中多建一個Camera。此時應(yīng)刪除一個,使場景中的聲音監(jiān)聽器保持一個。

什么是組件?組件就是代碼程序,和我們自己寫的代碼沒有什么不同,組件只不過被系統(tǒng)進行了封裝,對組件的引用、對組件的公共變量的調(diào)用和調(diào)用自己寫的代碼中的變量是一樣的。也是就是我們的代碼怎么用,對組件就怎么用。5.4.2音頻系統(tǒng)2.AudioSource從字面上理解就是“聲音來源”,用來發(fā)聲,Unity中的聲音分為兩種,一個3D聲音,一個是2D聲音,3D聲音就是完全模擬現(xiàn)實世界中的聲音,Unity是一款3D游戲引擎,任何游戲最根本都是一個模擬的過程,當(dāng)然也要模擬聲音,現(xiàn)實世界的聲音的特點是隨著距離的增加音量會衰減。也就是說離聲源越遠(yuǎn)聽到的聲音越小。而2D聲音則不會發(fā)生衰減。5.4.2音頻系統(tǒng)

在AudioSource組件下有很多公共屬性,下面我們依次講解這些屬性的意義。AudioClip是一個類,表示的意思是聲音片段,可以理解成是一個聲音文件,拖拽到這個變量對應(yīng)的窗口中。但如果在代碼中調(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ù),目的是控制播放音量,如果不填,默認(rèn)值為1;例子:as.PlayOneShot(聲音變量);as.PlayOneShot(聲音變量,1);5.4.2音頻系統(tǒng)(5)PlayClipAtPoint(),在場景中的某點坐標(biāo)播放聲音。語法結(jié)構(gòu):publicstaticvoidPlayClipAtPoint(AudioClipclip,Vector3position);所屬類:AudioSource;方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。調(diào)用時不需要AudioSource實例的一次播放。該方法包含兩個參數(shù),第一個參數(shù)是要播放的聲音,第二個參數(shù)是聲源坐標(biāo)。例子:AudioSource.PlayClipAtPoint(聲音變量名,newVector3(1,1,1));//在坐標(biāo)1.1.1的點播放聲音。5.4.2音頻系統(tǒng)謝謝第五章虛擬現(xiàn)實開發(fā)工具4

Unity的軟件是一款非常優(yōu)秀的游戲引擎,其中一個原因就是Unity為開發(fā)游戲提供了很大的便利,其中物理系統(tǒng)就是一個非常方便的工具,可以想象制作任何一款游戲,都離不開物體之間的物理響應(yī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:是否開啟動力學(xué)。Interpolate:插值,用于控制剛體運動的抖動情況,包含三個子項分別是None(沒有插值)、Interpolate(內(nèi)插值,基于前一幀的值來平滑)、Extrapolate(外插值,基于后一幀的值來平滑)。5.4.3物理系統(tǒng)CollisionDetection:碰撞檢測。包括四個子項Discrete(離線碰撞檢測,用兩個速度較慢的對象的碰撞檢測,消耗資源最低)Continuous(連續(xù)碰撞檢測,適用于一個快速對象和較慢的對象的檢測,消耗資源較低)ContinuousDynamic(連續(xù)動態(tài)碰撞檢測,適用于兩個快速的物體間的檢測,消耗資源較高)Continuousspeculative(連續(xù)預(yù)判性檢測)5.4.3物理系統(tǒng)Constraints:約束,用來控制物體對碰撞所產(chǎn)生的運動約束。FreezePosition:凍結(jié)位置,能禁止物體沿世界坐標(biāo)系的三個方向的位移。FreezeRotation:凍結(jié)旋轉(zhuǎn),能禁止物體沿世界坐標(biāo)系的三個方向的旋轉(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ā)器只是碰撞器身上的一個屬性。

當(dāng)IsTrigger=false時,碰撞器根據(jù)物理引擎引發(fā)碰撞,產(chǎn)生碰撞的效果,可以調(diào)用OnCollisionEnter/Stay/Exit方法;當(dāng)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,作用點在坐標(biāo)1,1,1的位置。剛體類常用的代碼方法(3)AddExplosionForce(),添加爆炸力語法結(jié)構(gòu):publicvoidAddExplosionForce(floatexplosionForce, Vector3explosionPosition,floatexplosionRadius);方法解析:實例方法,需要用實例.的形式調(diào)用該方法。實現(xiàn)在世界坐標(biāo)下的產(chǎn)生一個力,力的位置參照explosionPosition,力的位置可以在物體輪廓之外,力的大小依照explosionForce,力的作用范圍半徑explosionRadius,方法內(nèi)部可以根據(jù)力的大小、位置、范圍計算力的對物體產(chǎn)生的影響。所屬類:Rigidbody;例子:r.AddExplosionForce(10,newVector3(1,1,1),20);//在世界坐標(biāo)系下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)生的信息,里面包含所碰到的物體,碰撞點的坐標(biāo)等。剛體類常用的代碼方法

關(guān)鍵字out的意思是可以在方法內(nèi)部對參數(shù)變量進行更改,這么做的目的一般是因為我們需要一個方法返回兩個有用的數(shù)據(jù),但是利用常規(guī)的return方法只能返回一個數(shù)據(jù),所以需要使用out來返回第二個返回值。例如當(dāng)前SweepTest方法,會返回一個是否碰撞到碰撞器的bool值,還會out出對應(yīng)的碰撞器的碰撞信息。該方法的檢測只檢測碰到的第一個碰撞器,檢測到第一個,方法即結(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休眠值,當(dāng)速度小于這個值,則靜止。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球形射線檢測,CapsuleCast膠囊射線檢測。5.物理類常用的代碼方法(4)CheckSphere:檢測虛擬Sphere在世界空間坐標(biāo)系中是否和碰撞器重疊。語法結(jié)構(gòu):publicstaticboolCheckSphere(Vector3position,float radius);所屬類:Physics;方法解析:在空間中一點設(shè)置一個虛擬的球形碰撞器,檢測是否有物體與該球體發(fā)生碰撞,如果有,則返回true,否則返回false,postion為坐標(biāo),radius為半徑,layerMask是要進行檢測的層級。同類的方法還有CheckBox、CheckCapsule5.物理類常用的代碼方法(5)OverlapSphere:返回球內(nèi)或與之接觸的所有碰撞器。語法結(jié)構(gòu):publicstaticCollider[]OverlapSphere(Vector3position, floatradius);所屬類:Physics;方法解析:在空間中一點設(shè)置一個虛擬的球形碰撞器,檢測是否有物體與該球體發(fā)生碰撞,將所有與之發(fā)生的碰撞的碰撞體存到一個數(shù)組中通過方法返回,postion為坐標(biāo),radius為半徑,layerMask是要進行檢測的層級。同類的方法還有OverlapBox、OverlapCapsule5.物理類常用的代碼方法物理材質(zhì)是模擬物體的表面物理效果的材質(zhì)。DynameicFriction:動態(tài)摩擦力。當(dāng)物體移動時的摩擦力。通常為0到1之間的值。值為0的效果像冰,而設(shè)為1時,物體運動將很快停止,除非有很大的外力或重力來推動它。物理材質(zhì)StaticFriction:靜態(tài)摩擦力。靜摩擦力。當(dāng)物體在表面靜止的摩擦力。通常為0到1之間的值。當(dāng)值為0時,效果像冰,當(dāng)值為1時,使物體移動十分困難。Bouncyness:反彈力,0的時候沒有反彈力,1的時候不發(fā)生力的衰減。FrictionCombine:摩擦力組合方式:兩個碰撞物體的摩擦力如何相互作用。有四種子項,四種計算方式Average(平均值)平均,Min(最小值)最小值,Max(最大值),Multiply(兩個值的乘積)。BounceCombine:反彈力組合方式:定義兩個碰撞物體的反彈力如何相互作用。物理材質(zhì)

角色控制器是Unity自帶的一個控制角色移動旋轉(zhuǎn)的組件,角色控制器允許游戲開發(fā)者在受制于碰撞的情況下發(fā)生移動,而不用處理剛體。角色控制器不會受到力的影響,在游戲制作過程中,游戲開發(fā)者通常在任務(wù)模型上添加角色控制器組件進行模型的模擬運動。角色控制器SlopeLimit坡度限制。StepOffset臺階高度。SlopeLimit坡度限制。StepOffset臺階高度。SkinWidth皮膚厚度。MinMoveDistance最小移動距離。Center中心。Radius半徑。Height高度。角色控制器謝謝第五章虛擬現(xiàn)實開發(fā)工具5

UGUI系統(tǒng)是從Unity4.6版本以后提供的新的UI系統(tǒng),相較之前GUI系統(tǒng),使用起來方便快捷,可視化效果好。UGUI系統(tǒng)提供了很多常用的組件,可以使用戶在不使用任何代碼的前提下,就可以簡單快速的建立其一套UI界面。5.4.4UGUI每一個ui控件都需要放到Canvas(畫布),當(dāng)創(chuàng)建或沒有Canvas(畫布)系統(tǒng)會默認(rèn)或自動創(chuàng)建一個Canvas(畫布)。Canvas(畫布)下有3個組件分別是:Canvas、CanvasScaler、GraphicRaycaster。Canvas組件下的RenderMode(渲染模式)一共有三種模式。1.CanvasScaleWithScreenSize模式(1)ConstantPixelSize模式使UI元素保持相同的像素大小,無論屏幕大小如何。(2)ScaleWithScreenSize模式,可以根據(jù)屏幕的大小進行縮放,在此模式下有三種不同的縮放方式。(3)ConstantPhysicalSize模式使UI元素保持相同的物理大小,而不考慮屏幕大小和分辨率。1.Canvas

RectTransform組件是可以看看成Transform的2D版,物體上的Transform組件是不可以刪除的,但是RectTransform組件是可以刪除的,刪除之前,需要將該物體上所有UGUI相關(guān)的組件都刪掉,之后就可以刪除RectTransform,刪掉之后,會發(fā)現(xiàn)RectTransform變成了Transform。從這里可以看出RectTransform只是Transform在2D情況的一個變種。2.RectTransformPos(X,Y,Z):相對于錨點點的位置。Width/Height:UI元素寬度和高度。Left,Top,Right,Bottom:Anchors:錨點矩形。Min:錨點矩形左下角位置,按屏幕的比例設(shè)置。Max:錨點矩形右上角位置,按屏幕的比例設(shè)置。Pivot:UI的中心點的位置,按自身UI的比例設(shè)置。Rotation:U旋轉(zhuǎn),單位是角度。Scale:縮放。2.RectTransform非交互式文本框,主要用來顯現(xiàn)文本內(nèi)容。Text:文本。Font:字體。FontStyle:文本樣式。FontSize:顯示文本的大小。LineSpacing:行距。AlignbyGeometry是否使用字形大小的方式對齊。BestFit是否根據(jù)文本框大小來自適應(yīng)文字Color文本的顏色。3.Text(文本控制)簡介Image(圖像)非交互式圖像。主要用于制作圖標(biāo)、背景等。SourceImage顯示的圖像,必須是Sprite(精靈)Color修改圖像的顏色。Material渲染圖像的材料。RaycastTarget是否可以進行射線檢測;ImageType顯示圖像的類型,選項包括Simple(標(biāo)準(zhǔn)圖片)、Sliced(九宮格切片)、Tille(背景平鋪)和Filled(旋轉(zhuǎn))。SetNativeSize將圖像的尺寸設(shè)置為圖像本身的像素;4.Image(圖像)如何將圖片變成精靈由于Image所支持的圖像格式都是Sprite格式,所有要將普通圖片轉(zhuǎn)換成精靈,找到要轉(zhuǎn)換的圖片文件并鼠標(biāo)單擊,然后找Inspector(屬性面板)下的TextureType里的Sprite,最后鼠標(biāo)單擊Apple完成。4.Image(圖像)

原始圖像和圖像很像它們都是向用戶顯示非交互式圖像。您可以將其用于裝飾或圖標(biāo)等目的,還可以將圖像從類更改為反映其他控件中的更改。控件類似于圖像控件,但提供了更多的選項來動畫圖像和精確填充控制矩形。然而,圖像控件要求其紋理為精靈,而原始圖像可以接受任何紋理。Texture顯示的圖像紋理。5.RawImage(原始圖像)

Button按鈕控件是在UGUI中最常用的一個組件之一,主要用來響應(yīng)用戶的鼠標(biāo)單擊,用于發(fā)起或確認(rèn)操作。Interactable(是否可用):勾選,按鈕可用,取消勾選,按鈕不可用,并進入Disabled狀態(tài)。該屬性在所有可交互組件中都有,之后不再描述。6.Button(按鈕)

Transition(過渡方式):按鈕在狀態(tài)改變時自身的過渡方式:主要分為賽中狀態(tài)的變化,默認(rèn)狀態(tài),高亮狀態(tài)(鼠標(biāo)懸停在Button上的狀態(tài)),點擊狀體(鼠標(biāo)點擊或選中后的狀態(tài)),不可點擊狀態(tài)(當(dāng)按鈕不可點擊的時候的狀態(tài))。(1)ColorTint(顏色過度)(2)SpriteSwap(精靈過渡)(3)Animation(執(zhí)行動畫)6.Button(按鈕)

Toggle大部分屬性等同于Button組件,同為按鈕,不同的只是他自帶了組合切換功能,當(dāng)然這些用Button也是可以實現(xiàn)的。IsOn(選中狀態(tài)):此Toggle的選中狀態(tài),設(shè)置或返回為一個bool。Group(所屬組合):這里指向一個帶有ToggleGroup組件的任意目標(biāo),將此Toggle加入該組合,之后此Toggle便會處于該組合的控制下,同一組合內(nèi)只能有一個Toggle可處于選中狀態(tài),即便是初始時將所有Toggle都開啟IsOn,之后的選擇也會自動保持單一模式。OnValueChanged(狀態(tài)改變觸發(fā)消息):當(dāng)此Toggle選中狀態(tài)改變時,觸發(fā)一次此消息。7.Toggle(單選)

帶有此組件的物體,可以同時管理多個Toggle,將需要被管理的Toggle的Group參數(shù)指向此ToggleGroup便可。AllowSwitchOff(是否允許關(guān)閉):ToggleGroup組默認(rèn)有且僅有一個Toggle可處于選中狀態(tài)(其管轄的所有Toggle中),如果勾選此屬性,則ToggleGroup組的所有Toggle都可同時處于未選中狀態(tài)。8.ToggleGroup(單選管理器)

Slider(滑動條)是一個主要用于形象的拖動以改變目標(biāo)值的控件,他的最恰當(dāng)應(yīng)用是用來改變一個數(shù)值,最大值和最小值自定義,拖動滑塊可在此之間改變,例如改變聲音大小。Direction(方向):滑動條的方向,從左至右,從上至下還是其他的。MinValue(最小值):滑動條的可變化最小值。MaxValue(最大值):滑動條的可變化最大值。WholeNumbers(變化值為整型):勾選此項,拖動滑動條將按整型數(shù)(最小為1)進行改變指定值。Value(值):當(dāng)前滑動條對應(yīng)的值。OnValueChanged:值改變時觸發(fā)消息。9.Slider(滑動條)

Scrollbar(滾動條):是一個主要用于形象的拖動以改變目標(biāo)比例的控件,他的最恰當(dāng)應(yīng)用是用來改變一個整體值變?yōu)樗闹付ò俜直壤畲笾?(100%),最小值0(0%),拖動滑塊可在此之間改變,例如改變滾動視野的顯示區(qū)域。Direction(方向):滾動條的方向,從左至右,從上至下還是其他的。Value(值):當(dāng)前滾動條對應(yīng)的值。Size(操作條矩形長度):操作條矩形對應(yīng)的縮放長度。NumbersOfSteps(指定可滾動的位置數(shù)量):滾動條可滾動的位置數(shù)目,為0和1時不生效。OnValueChanged:值改變時觸發(fā)消息。10.Scrollbar(滾動條)Dropdown(下拉菜單)可以讓用戶從選項列表中選擇一個選項。CaptionText:保存當(dāng)前選中選項的文本。(可選)CaptionImage:保存當(dāng)前選中選項的圖像。(可選)ItemText:下拉框選項里的文字。ItemImage:下拉框選項里的圖片。Value:當(dāng)前選中選項下標(biāo)。0代表第一個選項,1表示第二個,以此類推。Options:可選的選項的列表。每個選項可以指定text和imageOnValueChanged:當(dāng)用戶鼠標(biāo)選中的一個選項時,一個事件會被調(diào)用。11.Dropdown(下拉菜單)Text(文本):文本初始內(nèi)容。CharacterLimit(字符數(shù)量限制):文本輸入字?jǐn)?shù)限制。Standard(標(biāo)準(zhǔn)類型):什么字符都能輸入,默認(rèn)設(shè)置。IntegerNumber(整數(shù)類型):只能輸入整數(shù)。 DecimalNumber(十進制數(shù)):能輸入整數(shù)或小數(shù)。 Alphanumeric(文字和數(shù)字):能輸入數(shù)字和字母。 Name(姓名類型):能輸入英文及其他文字,(首字母大寫)。 Password(密碼類型):輸入的字符隱藏為星號。Placeholder(位置標(biāo)示):文字提示框,OnValueChanged:當(dāng)數(shù)值改變時調(diào)用方法。EndEdit:結(jié)束編輯時調(diào)用方法。12.InputField(輸入文本框)

當(dāng)需要在一個小區(qū)域中顯示占用大量的內(nèi)容時,可以使用滾動矩形。滾動矩形提供了在此內(nèi)容上滾動的功能。通常,滾動矩形要和蒙版組件配合,為了創(chuàng)建滾動視圖,其中只有滾動矩形內(nèi)的可滾動內(nèi)容是可見的。Horizontal:是否可以左右滾動Vertical:是否可以上下滾動MovementType:拖動的約束。分別有無限制的,彈性的或限制的。Unrestricted:無限制的,可以任意滾動。Elasticity:當(dāng)內(nèi)容到達滾動矩形的邊緣時,將對內(nèi)容進行反彈Clamped:強制內(nèi)容保持在滾動矩形的范圍內(nèi)。13.ScrollRect(滾動界面)

Mask(遮罩)不是一個可見的UI控件,而是一種修改控件子元素外觀的方法。因此,如果子元素比父元素圖像大,那么只能看到子元素中適合父元素的部分。該組件,我們在講解RawImage時,曾經(jīng)用過。用于顯示圓形的畫面,這里的遮罩和我們?nèi)粘I钪姓趽跻馑颊孟喾?,這里的遮罩是遮住什么地方就顯示什么地方。ShowGraphicMask:是否顯示遮罩層的圖像。14.Mask(遮罩)

布局組件是UGUI的一個特色組件,用來調(diào)整UGUI在自動布局時的UI的大小。IgnoreLayout當(dāng)啟用時,忽略此布局。MinWidth應(yīng)有的最小寬度。MinHeight應(yīng)有的最小高度。PreferredWidth首選寬度。PreferredHeight首選高度。FlexibleWidth瓜分剩余橫向空間的比例。FlexibleHeight瓜分剩余縱向空間的比例。LayoutPriority布局優(yōu)先級。15.LayoutElement(布局)

ContentSizeFitter組件主要是用來設(shè)置自身UI的長寬(這個自身時包含子UI的寬、高)。HorizontalFit:寬度的控制Unconstrained:不根布局組件調(diào)整,可手動修改寬度值。 MinSize:按布局組件最小值來調(diào)整,不能手動修改寬度值。PreferredSize:按布局組件首選值來調(diào)整,不能手動修改寬度值。VerticalFit:高度的控制和寬度的類似,不再描述。這個組件的應(yīng)用一定要配合LayoutElement組件,否則無效。16.ContentSizeFitter根據(jù)比例自動調(diào)整自身UI的大小;None:不使用適合的縱橫比。WidthControlsHeight:讓Height隨著Width自動調(diào)節(jié)。HeightControlsWidth:讓W(xué)idth隨著Height自動調(diào)節(jié)。FitInParent:寬度、高度、位置和錨點都會被自動調(diào)整,以使得該矩形擬合父物體的矩形內(nèi),同時保持寬高比例。EnvelopeParent:寬度、高度、位置和錨點都會被自動調(diào)整,以使得該矩形覆蓋父物體的整個區(qū)域,同時保持寬高比。17.AspectRatioFitter

水平布局組件通常和LayoutElement配合使用,將其子UI橫向并依次放在一起。子UI的大小根據(jù)自身的LayoutElement組件的值進行設(shè)置。Padding:布局的邊界大小。Spacing:行距。ChildAlignment:對齊方式.ControlChildSize:是否控制其子布局元素的寬度和高度。ChildForceExpand:是否填充額外的可用空間。18.HorizontalLayoutGroup

垂直布局與水平布局除了方向都是一樣的。19.VerticalLayoutGroupGridLayoutGroup就是垂直布局和水平布局的綜合版。Padding:布局的邊界大小。CellSize:每個子UI的大小。Spacing:布局元素之間的行距。StartCorner:起始位置。StartAxis:橫向排列合適縱向排列ChildAlignment:對齊方式。Constraint:將網(wǎng)格約束為固定數(shù)量的行或列,以幫助自動布局系統(tǒng)。Flexible:是默認(rèn)不約束。包含兩個子項,F(xiàn)ixedColumnCount(一行幾個)FixedRowCount:(一列幾個)。20.GridLayoutGroup謝謝第五章虛擬現(xiàn)實開發(fā)工具6

NavigationMesh組件Unity提供的一個實現(xiàn)AI可以自動移動,尋找最優(yōu)路徑,到達目的位置的組件。想要尋路需要以下幾步,把要尋路的物體添加上NavMeshAgent(自動尋路組件)。然后選中作為尋路的物體,在物體上的GameObject里Static下的找到Navigationstatic勾選上。5.4.5NavigationMesh依次選擇菜單欄中的Windows->AI->Navigation打開。Navigation面板找到Bake,鼠標(biāo)單擊Bake,進行場景烘培。烘焙后的場景會生成一個藍色網(wǎng)格面,這個面的范圍就是物體所能尋路的區(qū)域。

注意,尋路網(wǎng)格是一個單獨的個體,不隨著模型而移動,生成網(wǎng)格后,如果對場景進行了修改或移動,則需要重新烘焙場景。5.4.5NavigationMeshAgentRadius物體空間半徑AgentHeight物體空間高度MaxSlope可行走的最大的坡度StepHeight可走上的最大臺階高Dropheight可跳下的高度JumpDistance可跳躍的距離5.4.5NavigationMeshCost:用來設(shè)置路徑價值,比如走樓梯,消耗體能20,而坐電梯,消耗體能5,自然會選擇后者方式。1.NavMeshArea

它是一個組件可以控制我們的npc繞過場景中的障礙物,避開其他npc擋路到達目標(biāo)點。之所以使用它就是因為它可以避開其他npc,甚至繞過一些移動的障礙物。2.NavMeshAgentAgentType:代理的類型。Baseoffset:偏移,修改代理的高低。Speed:尋路時移動的最大速度。AgularSpeed:尋路時是旋轉(zhuǎn)的速度。Acceleration:旋轉(zhuǎn)加速度。AutoBraking:是否自動停止。StoppingDistance:尋路時,距離目標(biāo)多遠(yuǎn)停止。Radius:代理的半徑(指寬度)。Height:代理的高度。AutoRepath:自動重新規(guī)劃路徑。AreaMask:選擇進入什么區(qū)域。2.NavMeshAgent

我們游戲中通常在尋路時會遇見一些障礙物(動態(tài),靜態(tài)障礙物),對于這些障礙物的控制我們使用NavMeshObstacle組件。Shape:障礙形狀(盒子形、膠囊形)Center:位置中心Size:縮放大小Carve:選中會自動繞路。否則會碰到障礙物就會卡主,不會找新路線(如沒有打勾則沒有下幾列)3.NavMeshObstacle

用于手動指定路線來生成分離的網(wǎng)格連接。例如,游戲中讓行進對象上下爬梯子到達另一塊網(wǎng)格的情景就是利用生成分離的網(wǎng)格連接來實現(xiàn)。Start:開始端的物體;End:結(jié)束端物體;CostOverride:是否計算價值。Bi-Directional是否雙向移動。Activated是否在尋路的時候使用該組件。AutoUpdatePositions如果打勾兩個端點如果移動了會自動調(diào)整導(dǎo)航位置;NavigationArea路徑區(qū)域4.OffMeshLink自動尋路中除了下面要講到的方法,還有很多屬性變量,這些變量在上面提到的面板中都有講過,可以通過調(diào)取實例屬性的方式調(diào)取,此處不再贅述。(1)NavMesh類以下的方法都所屬于NavMesh類①GetAreaCost:獲取在本導(dǎo)航網(wǎng)格的價值。語法結(jié)構(gòu):publicstaticfloatGetAreaCost(intareaIndex);方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。實現(xiàn)是通過查詢導(dǎo)航網(wǎng)格索引參數(shù)是areaIndex,來查看本導(dǎo)航網(wǎng)格的成本。有返回值。返回類型為float類型。5.NavigationMesh常用代碼②SetAreaCost:設(shè)置相應(yīng)導(dǎo)航網(wǎng)格區(qū)域的成本。語法結(jié)構(gòu):publicstaticvoidSetAreaCost(intareaIndex,floatcost);方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。實現(xiàn)是通過想修改成本的導(dǎo)航網(wǎng)格索引參數(shù)areaIndex,讓它的成本修改成cost參數(shù)。5.NavigationMesh常用代碼③GetAreaFromName:通過名字獲取區(qū)域索引語法結(jié)構(gòu):publicstaticintGetAreaFromName(stringareaName);方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。實現(xiàn)是通過參數(shù)areaName名字來查詢是否有這個區(qū)域,如果有返回的值為正數(shù),則為索引;如果找不到區(qū)域,則為-1。5.NavigationMesh常用代碼④AllAreas:包括所有NavMesh區(qū)域的區(qū)域蒙版的常數(shù)。語法結(jié)構(gòu):publicconstintAllAreas=-1;Raycast;檢測區(qū)域語法結(jié)構(gòu):publicstaticboolRaycast(Vector3sourcePosition,Vector3targetPosition,outNavMeshHithit,intareaMask);方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。該方法用來檢測以參數(shù)sourcePosition為起點,到參數(shù)targetPosition終點。該方法有返回值,由生成點到目標(biāo)點方向生成一條射線,如果碰到區(qū)域(參數(shù)areaMask)邊緣則返回true,到達目標(biāo)點且沒有碰到區(qū)域則返回false該方法中有一個outNavMeshHithit參數(shù),hit是一個射線NavMeshHit類,用來保存射線碰撞物體所產(chǎn)生的信息,里面包含所碰到的物體的坐標(biāo)等。5.NavigationMesh常用代碼⑤CalculatePath:計算兩點間路徑并保存語法結(jié)構(gòu):publicstaticboolCalculatePath(Vector3sourcePosition,Vector3targetPosition,intareaMask,NavMeshPathpath);方法解析:靜態(tài)方法,需要用類名.的形式調(diào)用該方法。此功能可用于提前計劃路徑,以避免在需要該路徑時游戲延遲。另一個用途是在移動代理程序之前檢查目標(biāo)位置是否可達。該方法有返回值,如果找到完整或部分路徑,則為true,否則為false。5.NavigationMesh常用代碼(2)NavMeshHit類①position:物體的位置語法結(jié)構(gòu):publicVector3position{get;set;}②normal:標(biāo)準(zhǔn)化語法結(jié)構(gòu):publicVector3normal{get;set;}③distance:到射線擊中點的距離。語法結(jié)構(gòu):publicfloatdistance{get;set;}④mask:設(shè)置或獲取NavMesh區(qū)域的值。語法結(jié)構(gòu):publicintmask{get;set;}⑤hit:射線是否命中語法結(jié)構(gòu):publicboolhit{get;set;}5.NavigationMesh常用代碼(3)NavMeshAgent類①destination:賦值讓尋路組件的物體去哪語法結(jié)構(gòu):publicVector3destination{get;set;}②SetDestination:傳參的形式讓尋路組件的物體去哪語法結(jié)構(gòu):publicboolSetDestination(Vector3target);方法解析:實例方法,需要實例.的形式調(diào)用該方法。此方法需要把要去的點以參數(shù)的形式傳入進去即可尋路。5.NavigationMesh常用代碼③isOnNavMesh:該代理物體是否在導(dǎo)航網(wǎng)格上語法結(jié)構(gòu):publicboolisOnNavMesh{get;}④nextPosition:獲取或設(shè)置navmesh代理的模擬位置。語法結(jié)構(gòu):publicVector3nextPosition{get;set;}⑤path:獲取或設(shè)置當(dāng)前路徑的屬性。語法結(jié)構(gòu):publicNavMeshPathpath{get;set;}5.NavigationMesh常用代碼⑥SetPath:設(shè)置新路徑語法結(jié)構(gòu):publicboolSetPath(NavMeshPathpath);方法分析:實例方法,需要實例.的形式調(diào)用該方法。此方法為該代理分配新路徑參數(shù)為path。該方法有返回值,如果成功分配了路徑,代理將恢復(fù)向新目標(biāo)的移動。則為true。如果無法分配路徑,則將清除該路徑返回false。5.NavigationMesh常用代碼⑦SamplePathPosition:向前查找指定的距離,和NavMesh里面的RayCast相似。語法結(jié)構(gòu):publicboolSamplePathPosition(intareaMask,floatmaxDistance,outNavMeshHithit);方法解析:實例方法,需要實例.的形式調(diào)用該方法。該方法是以實例的物體自身前方向開始到參數(shù)maxDistance的之間生成一條射線,該方法有返回值,如果碰到區(qū)域(參數(shù)areaMask)邊緣則返回true,到達目標(biāo)點且沒有碰到區(qū)域則返回false該方法中有一個outNavMeshHithit參數(shù),hit是一個射線NavMeshHit類,用來保存射線碰撞物體所產(chǎn)生的信息,里面包含所碰到的物體,碰撞點的坐標(biāo)等。5.NavigationMesh常用代碼⑧isOnOffMeshLink:當(dāng)前代理是否位于OffMeshLink上語法結(jié)構(gòu):publicboolisOnOffMeshLink{get;}⑨currentOffMeshLinkData:當(dāng)前的OffMeshLinkData。如果此代理不在OffMeshLink上,則將OffMeshLinkData標(biāo)記為無語法結(jié)構(gòu):publicOffMeshLinkDatacurrentOffMeshLinkData{get;}⑩nextOffMeshLinkData:當(dāng)前路徑上的下一個OffMeshLinkData。如果當(dāng)前路徑不包含OffMeshLink,則將OffMeshLinkData標(biāo)記為無效。語法結(jié)構(gòu):publicOffMeshLinkDatanextOffMeshLinkData{get;}?CompleteOffMeshLink:在當(dāng)前分離網(wǎng)格鏈接上完成運動。語法結(jié)構(gòu):publicvoidCompleteOffMeshLink();5.NavigationMesh常用代碼(4)OffMeshLink類①activated:分離網(wǎng)格鏈接激活語法結(jié)構(gòu):publicboolactivated{get;set;}②occupied:是否占用語法結(jié)構(gòu):publicbooloccupied{get;}③startTransform:開始端的物體語法結(jié)構(gòu):publicTransformstartTransform{get;set;}5.NavigationMesh常用代碼(4)OffMeshLink類④endTransform:結(jié)束端的物體語法結(jié)構(gòu):publicTransformendTransform{get;set;}⑤biDirectional:可以雙向遍歷鏈接。語法結(jié)構(gòu):publicboolbiDirectional{get;set;}⑥area:此OffMeshLink組件的NavMesh區(qū)域索引。語法結(jié)構(gòu):publicintarea{get;set;}5.NavigationMesh常用代碼(5)OffMeshLinkData類①valid:鏈接有是否效語法結(jié)構(gòu):publicboolvalid{get;}②activated:獲取鏈接是否處于激活狀態(tài)語法結(jié)構(gòu):publicboolactivated{get;}③startPos:獲取鏈接開始的位置語法結(jié)構(gòu):publicVector3startPos{get;}④endPos:獲取鏈接結(jié)束的位置語法結(jié)構(gòu):publicVector3endPos{get;}5.NavigationMesh常用代碼謝謝第五章虛擬現(xiàn)實開發(fā)工具7

Unity中的粒子系統(tǒng)可用于制作特效,例如爆炸,技能,碰撞等。通過該組件能做出很多漂亮的效果。通過菜單欄的GameObject->Effects->ParticleSystem即可在場景中添加一個名為ParticleSystem粒子系統(tǒng)物體。5.4.6Shuriken(粒子特效)是粒子系統(tǒng)的主面板。Duration:粒子發(fā)射周期;Looping:粒子按照周期循環(huán)發(fā)射。Prewarm:預(yù)熱系統(tǒng);StartDelay:粒子延時發(fā)射;StartLifeTime:生命起始時間;StartSpeed:粒子初始發(fā)生時候的速度。3DStartSize:粒子單個縮放;5.4.6.1ParticleSystemStartSize:整體縮放。粒子初始的大小。3DStartRotation:粒子單個旋轉(zhuǎn)。StartRotation:整體旋轉(zhuǎn)。粒子初始旋轉(zhuǎn)。FlipRotation:隨機旋轉(zhuǎn)粒子方向。StartColor:粒子初始顏色,GravityModifier:為粒子添加重力。SimulationSpace:空間位置。Local此時粒子會跟隨父級物體移動。5.4.6.1ParticleSystemWorld此時粒子不會跟隨父級移動。Custom粒子會跟著指定的物體移動。SimulationSpeed:根據(jù)Update模擬的速度。MaxParticles:同時存在的最大粒子數(shù)量。AutoRandomSeed:隨機速度。StopAction:當(dāng)屬于系統(tǒng)的所有粒子都已完成時,可以使系統(tǒng)執(zhí)行動作。5.4.6.1ParticleSystem此模塊主要定義粒子發(fā)射器,以及開始粒子速度的方向。以下部分詳細(xì)介紹了每個Shape和Hemisphere的屬性。5.4.6.2shape形狀模塊(2)Cone(圓錐)以下部分詳細(xì)介紹了Co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論