Unity進(jìn)階與實(shí)踐解析 課件 第3、4章 Unity入門、Unity進(jìn)階_第1頁(yè)
Unity進(jìn)階與實(shí)踐解析 課件 第3、4章 Unity入門、Unity進(jìn)階_第2頁(yè)
Unity進(jìn)階與實(shí)踐解析 課件 第3、4章 Unity入門、Unity進(jìn)階_第3頁(yè)
Unity進(jìn)階與實(shí)踐解析 課件 第3、4章 Unity入門、Unity進(jìn)階_第4頁(yè)
Unity進(jìn)階與實(shí)踐解析 課件 第3、4章 Unity入門、Unity進(jìn)階_第5頁(yè)
已閱讀5頁(yè),還剩195頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3.1創(chuàng)建基礎(chǔ)的游戲場(chǎng)景

3.2Unity資源

3.3物理系統(tǒng)

3.4UGUI

3.5EVENT事件3.1創(chuàng)建基礎(chǔ)的游戲場(chǎng)景3.1.1Camera相機(jī)1.相機(jī)簡(jiǎn)介相機(jī)是玩家用于捕捉和顯示世界的一種裝置,在一個(gè)場(chǎng)景中可以有數(shù)量不限的相機(jī)。它們能夠以任何順序在屏幕上的任何地方來(lái)渲染,或僅僅渲染屏幕的一部分。通過(guò)在Hierrchy面板中單擊鼠標(biāo)右鍵,選擇Camera即可建立。相機(jī)在場(chǎng)景中的應(yīng)用如圖3.1所示。2.相機(jī)主要屬性通過(guò)相機(jī)的Inspector面板可以看到相機(jī)的屬性,如圖3.2和圖3.3所示。相機(jī)屬性詳細(xì)介紹如表3.1所示。3.1.2Terrain地形1.地形創(chuàng)建在Hierrchy面板中單擊鼠標(biāo)右鍵,在彈出的列表中選擇3DObject下的Terrain選項(xiàng),即可創(chuàng)建一個(gè)地形,如圖3.4所示。2.地形繪制(1)在場(chǎng)景里添加一個(gè)Terrain。(2)添加Terrain后會(huì)自動(dòng)在Inspector中生成Terrain的屬性面板,面板里的4個(gè)按鈕分別具有不同的作用,第一個(gè)按鈕是毛筆形狀,該按鈕可以修改地形的高度、順滑度、基本的地形貼圖等。點(diǎn)擊第一個(gè)按鈕會(huì)出現(xiàn)CreateNeighborTerrains選項(xiàng)卡,在該選項(xiàng)卡的下拉菜單中選擇SetHeight來(lái)設(shè)置地形高度,如圖3.5~圖3.7所示。設(shè)置完高度后就可以繪制地形了,點(diǎn)擊鼠標(biāo)左鍵進(jìn)行移動(dòng),可以把鼠標(biāo)經(jīng)過(guò)的地方按照設(shè)置好的高度進(jìn)行地形繪制。如果同時(shí)按住Ctrl鍵和鼠標(biāo)左鍵,便不會(huì)對(duì)地形進(jìn)行高度繪制。設(shè)置完地形高度之后選擇PaintTexture,為地形添加一個(gè)貼圖,如圖3.8所示,并對(duì)貼圖進(jìn)行設(shè)置,如圖3.9所示。點(diǎn)擊EditTerrainLayers選擇合適的貼圖,如圖3.9中2所示,并在下方出現(xiàn)的詳細(xì)設(shè)置中,用戶可以根據(jù)情況自行進(jìn)行設(shè)置。(3)拉高地形和降低地形(制作高山和低谷)。選中RaiseorLowerTerrain后選擇下面的筆刷并設(shè)置筆刷大小,然后在地形上就可以繪制了,如圖3.10、圖3.11所示。鼠標(biāo)左鍵用于拉高地形,鼠標(biāo)左鍵?+?Shift用于降低地形。3.種樹(shù)工具選中第二個(gè)種樹(shù)按鈕,并點(diǎn)擊EditTrees…→Add來(lái)添加不同的樹(shù),如圖3.12所示。選擇好樹(shù)的模型后,可以點(diǎn)擊MassPlaceTrees按鈕來(lái)大面積均勻地在全部地形中種樹(shù),如圖3.13所示。如果想要自定義樹(shù)的數(shù)量屬性,可以自行設(shè)置數(shù)值大小,如圖3.14所示。也可以設(shè)置筆刷的大小、種樹(shù)的密集程度、樹(shù)的高度等,按住Shift操作可以獲得其相反的屬性,如圖3.15所示。4.添加草坪添加草坪的操作和種樹(shù)是同理的,點(diǎn)擊3個(gè)按鈕,選擇合適的筆刷并設(shè)置筆刷大小,即可進(jìn)行草坪的繪制,如圖3.16、圖3.17所示。3.1.3Skybox天空盒在Unity新建的項(xiàng)目場(chǎng)景中,都會(huì)默認(rèn)提供一個(gè)基本的天空盒效果,但是這個(gè)天空盒的效果較為普通,可以將其改為自己想要的其他天空盒效果。從菜單欄中依次選擇Windows→AssetStore命令,在搜索欄中輸入Skybox并按回車鍵,選擇FREEONLY就可以看到大量的免費(fèi)天空盒,如圖3.18所示。選擇自己喜歡的天空盒,點(diǎn)擊Download按鈕,如圖3.19所示。下載完成后,點(diǎn)擊對(duì)話框中的Import按鈕,即可將新下載的天空盒導(dǎo)入到場(chǎng)景中。在菜單欄中依次選擇Window→Lighting→Settings命令,在彈出的Lighting對(duì)話框中點(diǎn)擊Environment下的SkyboxMaterial選項(xiàng)右側(cè)的小圓圈,選擇剛才導(dǎo)入的天空盒,如圖3.20所示。3.2Unity資源3.2.1模型導(dǎo)入1.模型導(dǎo)入簡(jiǎn)介1)3D模型的導(dǎo)入方式依次選擇菜單欄中的Aseets→ImportPackage→CustomPackage或者直接拖動(dòng)文件到Assets文件夾中,即可導(dǎo)入3D模型。Unity支持使用大多數(shù)常規(guī)3D建模軟件所創(chuàng)建的模型,包括Maya、Cinema4D、3dsMax、Cheetah3D、Modo、Lightwave、Blender等。Unity支持兩種不同類型的網(wǎng)絡(luò)模型文件,一種是從3D建模軟件中導(dǎo)出的?.fbx或?.obj文件,這種類型的文件可以在很多第三方軟件中導(dǎo)入和編輯。而另一種則是部分3D建模軟件的原生格式,如3dsMax中的.max文件,或是Blender中的.blend文件,這類文件在導(dǎo)入U(xiǎn)nity時(shí)會(huì)經(jīng)過(guò)一定的轉(zhuǎn)換,因此不能在其他的軟件中直接編輯,當(dāng)然,有一種例外是SketchUp的?.skp文件,可以在SketchUp和Unity中隨意打開(kāi)和編輯。2)2D圖片的導(dǎo)入方式Unity支持的2D圖片格式有TIFF、PSD、TGA、JPG、PNG、GIF、BMP、IFF、PICT等,其中PNG格式是用得最多的格式。為了優(yōu)化效率,建議圖片尺寸是2的n次冪,如32、64、1024等。依次選擇菜單欄中的Assets→Create→ImportNewAssets(一次只能導(dǎo)一張圖片)或者直接將資源拖動(dòng)到Project視圖中的Assets文件夾中(可以同時(shí)導(dǎo)入多張圖片),即可導(dǎo)入2D圖片。這里需要特別注意的是,如果希望在2D游戲中使用2D圖像文件作為精靈,或者作為2D游戲中的UI圖片元素,那么必須手動(dòng)將其TextureType更改為Sprite(2DandUI)。2.精靈渲染器精靈是Unity2D里面通過(guò)圖片紋理實(shí)現(xiàn)的游戲?qū)ο?,通常是游戲里面的玩家、敵人等。在Unity里面創(chuàng)建一個(gè)精靈的操作非常簡(jiǎn)單,可以依次選擇GameObject→2DObject→Sprite創(chuàng)建精靈。SpriteRenderer組件用于渲染精靈,還可以通過(guò)Components菜單將該組件添加到現(xiàn)有的游戲?qū)ο笊?,精靈渲染器屬性如圖3.21、圖3.22所示,精靈渲染器屬性介紹表如表3.2所示。表3.2精靈渲染器屬性介紹3.2.2材質(zhì)、著色器和紋理1.基本概念材質(zhì):物體的質(zhì)地,指顏色、紋理、光滑度、透明度、反射率、折射率、發(fā)光度等,實(shí)際就是Shader的實(shí)例。Shader著色器:用來(lái)控制可編程圖形渲染管線的程序,為了方便游戲開(kāi)發(fā)者使用,Unity提供了數(shù)量超過(guò)60個(gè)的內(nèi)建Shader,包括從最簡(jiǎn)單的頂點(diǎn)光照效果到高光、法線、反射等游戲中最常用的材質(zhì)效果。這些內(nèi)建Shader的代碼可以在Unity官方網(wǎng)站下載,開(kāi)發(fā)者基于這些代碼可以開(kāi)發(fā)更多個(gè)性化的Shader。在Unity中基于物理著色的內(nèi)建著色器叫做StandarShader(標(biāo)準(zhǔn)著色器)。Texture紋理:附加到物體表面的貼圖。2.標(biāo)準(zhǔn)Shader相關(guān)設(shè)置選項(xiàng)Shader屬性如圖3.23、圖3.24所示。1)標(biāo)準(zhǔn)Shader的四種不同渲染模式(1)Opaque:默認(rèn)的設(shè)置,適合渲染不透明的物體。(2)Cutout:允許渲染帶有完全不透明或完全透明區(qū)域的物體。(3)Fade:允許通過(guò)透明度的等級(jí)來(lái)實(shí)現(xiàn)物體的漸變顯示。(4)Transparent:允許渲染一些純透明的物體,比如玻璃、透明塑料等。2)標(biāo)準(zhǔn)的Shader的貼圖類型(1)Albedo:用于定義材質(zhì)的色彩和透明度。(2)Metallic:用于定義材質(zhì)表面對(duì)光的反射量,可以通過(guò)兩種方式進(jìn)行控制,一種方式是拖動(dòng)Metallic和Smoothness的滑動(dòng)條。Metallic數(shù)值決定了材質(zhì)接近金屬的程度,如果Metallic數(shù)值接近1,那么對(duì)光的反射量就最大。而Smoothness數(shù)值則決定了材質(zhì)表面的光滑度。另一種方式是給Metarial賦予一個(gè)texturemap。當(dāng)給Metallic賦予材質(zhì)時(shí),Metallic滑動(dòng)條都會(huì)消失,材質(zhì)的Red通道決定Metarial值,而Alpha通道則決定了材質(zhì)的表面光滑度。Source值表示選擇哪個(gè)屬性紋理的Alpha通道值。(3)NormalMap:法線貼圖,給物體表面添加類似刮痕或者凹槽的效果。法線貼圖是一種特殊類型的圖片,可以通過(guò)3D建模軟件生成,也可以手動(dòng)生成。(4)Height?Map:高度貼圖是一種類似法線貼圖的技術(shù),用于給表面定義凹凸效果。(5)OcclusionMap:剔除貼圖定義物體特殊區(qū)域的間接光亮,通常在3D建模軟件中基于3D模型的拓?fù)浣Y(jié)構(gòu)創(chuàng)建。剔除貼圖是灰度圖,白色代表該區(qū)域?qū)⑼耆邮臻g接光照,黑色則代表該區(qū)域?qū)⒉唤邮杖魏伍g接光照。(6)Emission:發(fā)光,控制材質(zhì)表面所發(fā)射光線的色彩和強(qiáng)度,一旦設(shè)置了Emission值,材質(zhì)看起來(lái)就像是從內(nèi)部發(fā)光一樣。(7)SecondaryMaps:允許設(shè)置材質(zhì)的第二個(gè)貼圖。3.創(chuàng)建和使用材質(zhì)要?jiǎng)?chuàng)建新材質(zhì),可從Project視圖中單擊鼠標(biāo)右鍵,在彈出的列表中依次選擇Assets→Create→Material。默認(rèn)情況下會(huì)為新材質(zhì)指定標(biāo)準(zhǔn)著色器,并且所有貼圖屬性都為空。創(chuàng)建材質(zhì)后,可將其應(yīng)用于對(duì)象并在Inspector中調(diào)整其所有屬性。要將材質(zhì)應(yīng)用于對(duì)象,只需將其從Project視圖拖到Scene或Hierarchy視圖中的任何對(duì)象上。設(shè)置材質(zhì)屬性的方法如下:(1)選擇希望特定材質(zhì)使用的著色器,在Inspector中展開(kāi)Shader的下拉列表中選擇新的著色器,所選的著色器將決定可更改的屬性。(2)屬性可能包括顏色、滑動(dòng)條、紋理、數(shù)字或矢量,如果已將材質(zhì)應(yīng)用于

Scene

視圖中的活動(dòng)對(duì)象,將看到屬性更改會(huì)實(shí)時(shí)應(yīng)用于對(duì)象。將紋理應(yīng)用于屬性時(shí)可采用兩種方法,分別是:①

將其從Project視圖拖到紋理方塊上。②

單擊Select按鈕后從顯示的下拉列表中選擇紋理。3.2.3音頻Unity音頻相關(guān)組件主要有音頻源(AudioSource)、音頻剪輯(AudioClip)、音頻監(jiān)聽(tīng)器(AudioListener)、過(guò)濾器組件等幾部分。音頻源是場(chǎng)景中某個(gè)位置的發(fā)聲裝置,好像一個(gè)喇叭,播放著音頻剪輯。發(fā)出的聲音將輸出到音頻監(jiān)聽(tīng)器,或者聲音混淆器(AudioMixer)。一般相機(jī)會(huì)默認(rèn)自帶一個(gè)AudioListener組件,也就是說(shuō)一個(gè)場(chǎng)景中,存在了默認(rèn)相機(jī)的情況下,只要添加一個(gè)音頻源,設(shè)置了播放的音頻剪輯,就可以完成播放的操作,而對(duì)于聽(tīng)到的聲音強(qiáng)弱和效果,則根據(jù)后續(xù)需要來(lái)決定。音頻源可以播放任意類型的音頻剪輯,它可以被配置為2D音頻源、3D音頻源或者2D、3D音頻源的混合形式(SpatialBlend,即空間混合)。聲音可以通過(guò)多個(gè)揚(yáng)聲器進(jìn)行輸出,用于模擬立體聲。

聲音也可以在3D和2D音頻源之間進(jìn)行空間混合變換,這種變換可以通過(guò)距離上的衰減曲線來(lái)進(jìn)行控制。另外,如果音頻監(jiān)聽(tīng)器伴隨著一個(gè)或者多個(gè)回音區(qū)域(ReverbZones),將同時(shí)產(chǎn)生回音。也可以對(duì)音頻源應(yīng)用一些特殊的音頻濾波器來(lái)獲得更加豐富的音效體驗(yàn)。音頻源屬性如圖3.25、圖3.26所示,音頻源屬性詳細(xì)介紹如表3.3所示。表3.3音頻源AudioSourc屬性介紹3.3物理系統(tǒng)3.3.1剛體1.剛體概述剛體(Rigidbody)可以讓一個(gè)物體受到物理影響,比如添加Rigidbody組件后,物體會(huì)立馬對(duì)重力做出反應(yīng)。如果物體上還添加了Collider組件,物體在受到碰撞時(shí)也會(huì)移動(dòng)。在Unity中,如果希望兩個(gè)對(duì)象發(fā)生碰撞,那么這兩個(gè)對(duì)象上都要有Collider組件,并且其中一個(gè)對(duì)象上必須有Rigidbody組件。當(dāng)一個(gè)對(duì)象上掛載著Rigidbody組件時(shí),應(yīng)該使用“力”來(lái)移動(dòng)物體,由物理引擎來(lái)計(jì)算移動(dòng)過(guò)程中的物理效果,而不是修改對(duì)象的Transform組件中的Position屬性。在日常開(kāi)發(fā)中,也會(huì)遇到不該用力移動(dòng)對(duì)象,但仍然希望物體進(jìn)行物理計(jì)算的情況。例如玩家的移動(dòng),這種移動(dòng)稱為動(dòng)力學(xué)運(yùn)動(dòng),此時(shí),可以勾選Rigidbody組件下的IsKinematic屬性。Rigidbody基本屬性如圖3.27所示。2.Rigidbody屬性介紹Rigidbody屬性詳細(xì)介紹如表3.4所示。3.3.2碰撞體1.碰撞體概述碰撞體是物理組件中的一類,3D物理組件和2D物理組件有獨(dú)立的碰撞體組件,它要與剛體一起添加到游戲?qū)ο笊喜拍苡|發(fā)碰撞。如果兩個(gè)剛體碰撞在一起,除非兩個(gè)對(duì)象有碰撞體時(shí)物理引擎才會(huì)計(jì)算碰撞,否則,物理模擬中沒(méi)有碰撞體的剛體會(huì)彼此相互穿過(guò)。最簡(jiǎn)單(并且也是處理器開(kāi)銷最低)的碰撞體是所謂的原始碰撞體類型。在3D中,這些碰撞體為盒型碰撞體、球形碰撞體和膠囊碰撞體。在2D中,可以使用2D盒型碰撞體和2D圓形碰撞體??梢詫⑷我鈹?shù)量的上述碰撞體添加到單個(gè)對(duì)象以創(chuàng)建復(fù)合碰撞體。一般可以通過(guò)選中游戲?qū)ο螅来芜x擇菜單欄中的Component→Physics命令來(lái)為游戲?qū)ο筇砑硬煌愋偷呐鲎搀w,如圖3.28所示。碰撞體類型分為以下6種:(1)盒型碰撞體(BoxCollider):立方體的原始形狀。(2)球形碰撞體(SphereCollider):球體的原始形狀。(3)膠囊碰撞體(CapsuleCollider):膠囊體的原始形狀。(4)網(wǎng)格碰撞體(MeshCollider):根據(jù)對(duì)象網(wǎng)格創(chuàng)建碰撞體,不能與另一個(gè)網(wǎng)格碰撞體碰撞。(5)車輪碰撞體(WheelCollider):專門用于創(chuàng)建汽車或其他移動(dòng)車輛。(6)地形碰撞體(TerrainCollider):處理與Unity地形系統(tǒng)的碰撞。2.提示兩個(gè)剛體的相對(duì)質(zhì)量決定了它們相互碰撞時(shí)的反應(yīng)情況。使一個(gè)剛體具有比另一個(gè)剛體更大的質(zhì)量并不會(huì)使其在自由落體時(shí)降落得更快,要使用阻力Drag,較低的Drag值會(huì)讓對(duì)象看起來(lái)較重,較高的Drag值會(huì)讓對(duì)象看起來(lái)較輕。Drag的典型值為0.001(實(shí)心金屬塊)~10(羽毛)之間。3.腳本碰撞回調(diào)發(fā)生碰撞時(shí),物理引擎會(huì)在附加到相關(guān)對(duì)象的所有腳本上調(diào)用特定名稱的函數(shù)??梢栽谶@些函數(shù)中放置所需的任何代碼來(lái)響應(yīng)碰撞事件。例如當(dāng)汽車撞到障礙物時(shí),可以播放碰撞音效。在第一個(gè)檢測(cè)到碰撞的物理更新中,將調(diào)用OnCollisionEnter()函數(shù)。在保持接觸的更新期間,將調(diào)用OnCollisionStay()函數(shù),最后由OnCollisionExit()函數(shù)指示接觸已經(jīng)中斷。觸發(fā)碰撞體會(huì)調(diào)用模擬的OnTriggerEnter()、OnTriggerStay()和OnTriggerExit()函數(shù)。請(qǐng)注意,對(duì)于2D物理,可使用在名稱中附加了2D字樣的等效函數(shù),例如OnCollisionEnter2D()函數(shù)。對(duì)于正常的非觸發(fā)碰撞,所涉及的對(duì)象中至少有一個(gè)對(duì)象必須具有非運(yùn)動(dòng)剛體(即必須關(guān)閉IsKinematic)屬性。如果兩個(gè)對(duì)象都是運(yùn)動(dòng)剛體,則不會(huì)調(diào)用OnCollisionEnter()等函數(shù)。對(duì)于觸發(fā)碰撞,此限制不適用,因此運(yùn)動(dòng)和非運(yùn)動(dòng)剛體都會(huì)在進(jìn)入觸發(fā)碰撞體時(shí)提示調(diào)用OnTriggerEnter()函數(shù)。4.碰撞體相互作用碰撞體彼此之間的相互作用因剛體組件的配置不同而不同。剛體組件的3個(gè)重要配置是靜態(tài)碰撞體(StaticCollider)(即完全沒(méi)有附加任何剛體)、剛體碰撞體(RigidbodyCollider)和運(yùn)動(dòng)剛體碰撞體(KinematicRigidbodyCollider)。1)靜態(tài)碰撞體靜態(tài)碰撞體是一種具有碰撞體但沒(méi)有剛體的游戲?qū)ο?。靜態(tài)碰撞體用于表示關(guān)卡幾何體,始終停留在同一個(gè)地方,永遠(yuǎn)不會(huì)四處移動(dòng)。靠近的剛體對(duì)象將與靜態(tài)碰撞體發(fā)生碰撞,但不會(huì)移動(dòng)靜態(tài)碰撞體。假定靜態(tài)碰撞體永遠(yuǎn)不會(huì)移動(dòng)或改變,并且可以基于此假設(shè)進(jìn)行有用的優(yōu)化。因此,在游戲運(yùn)行過(guò)程中不應(yīng)禁用、啟用、移動(dòng)或縮放靜態(tài)碰撞體。如果更改靜態(tài)碰撞體,則會(huì)導(dǎo)致物理引擎進(jìn)行額外的內(nèi)部重新計(jì)算,從而導(dǎo)致游戲性能大幅下降。這些更改有時(shí)會(huì)使碰撞體處于不明確的狀態(tài),從而產(chǎn)生錯(cuò)誤的物理計(jì)算。2)剛體碰撞體剛體碰撞體是一種附加碰撞體和普通非運(yùn)動(dòng)剛體的游戲?qū)ο蟆傮w碰撞體完全由物理引擎模擬,并可響應(yīng)通過(guò)腳本施加的碰撞和力。剛體碰撞體可與其他對(duì)象(包括靜態(tài)碰撞體)碰撞,是使用物理組件的游戲中最常用的碰撞體配置。3)運(yùn)動(dòng)剛體碰撞體運(yùn)動(dòng)剛體碰撞體是一種附加碰撞體和運(yùn)動(dòng)剛體(即啟用剛體的IsKinematic屬性)的游戲?qū)ο???墒褂媚_本來(lái)移動(dòng)運(yùn)動(dòng)剛體對(duì)象(通過(guò)修改對(duì)象的變換組件),但該對(duì)象不會(huì)像非運(yùn)動(dòng)剛體一樣響應(yīng)碰撞和力。運(yùn)動(dòng)剛體應(yīng)該用于符合以下特征的碰撞體:偶爾可能被移動(dòng)、禁用或啟用,除此之外的行為應(yīng)該像靜態(tài)碰撞體一樣。與靜態(tài)碰撞體不同,移動(dòng)的運(yùn)動(dòng)剛體會(huì)對(duì)其他對(duì)象施加摩擦力,并在雙方接觸時(shí)“喚醒”其他剛體。即使處于不動(dòng)狀態(tài),運(yùn)動(dòng)剛體碰撞體也會(huì)對(duì)靜態(tài)碰撞體產(chǎn)生不同的行為。如果將碰撞體設(shè)置為觸發(fā)器,則還需要向其添加剛體以便在腳本中接收觸發(fā)器事件。如果不希望觸發(fā)器在重力作用下跌落或在其他方面受物理影響,則可以在其剛體上設(shè)置IsKinematic屬性,使用IsKinematic屬性隨時(shí)讓剛體組件在常態(tài)和運(yùn)動(dòng)行為之間切換。3.3.3觸發(fā)器1.基本概念在Unity3D中,檢測(cè)碰撞發(fā)生的方式有兩種,一種是利用碰撞體,另一種則是利用觸發(fā)器。觸發(fā)器用來(lái)觸發(fā)事件,在很多游戲引擎或工具中都有觸發(fā)器。當(dāng)綁定了碰撞體的游戲?qū)ο筮M(jìn)入觸發(fā)器區(qū)域時(shí),會(huì)運(yùn)行觸發(fā)器對(duì)象上的OnTriggerEnter()函數(shù),同時(shí)需要在檢視面板中的碰撞體組件中勾選IsTrigger復(fù)選框,如圖3.29所示。腳本系統(tǒng)可以使用OnCollisionEnter()函數(shù)檢測(cè)何時(shí)發(fā)生碰撞并啟動(dòng)操作。但是,也可以直接使用物理引擎檢測(cè)碰撞體何時(shí)進(jìn)入另一個(gè)對(duì)象的空間而不會(huì)產(chǎn)生碰撞。配置為觸發(fā)器(使用IsTrigger屬性)的碰撞體不會(huì)表現(xiàn)為實(shí)體對(duì)象,只會(huì)允許其他碰撞體穿過(guò)。當(dāng)碰撞體進(jìn)入其空間時(shí),觸發(fā)器將在觸發(fā)器對(duì)象的腳本上調(diào)用OnTriggerEnter()函數(shù)。2.3D觸發(fā)器與碰撞器的區(qū)別1)觸發(fā)信息檢測(cè)使用的相關(guān)函數(shù)MonoBehaviour.OnTriggerEnter(Collidercollider)是當(dāng)進(jìn)入觸發(fā)器時(shí)執(zhí)行一次。MonoBehaviour.OnTriggerExit(Collider

collider)是當(dāng)退出觸發(fā)器時(shí)執(zhí)行一次。MonoBehaviour.OnTriggerStay(Collider

collider)是當(dāng)逗留觸發(fā)器時(shí)不斷執(zhí)行。2)碰撞信息檢測(cè)使用的相關(guān)函數(shù)MonoBehaviour.OnCollisionEnter(Collisioncollision)是當(dāng)進(jìn)入碰撞器時(shí)執(zhí)行一次。MonoBehaviour.OnCollisionExit(Collisioncollision)是當(dāng)退出碰撞器時(shí)執(zhí)行一次。MonoBehaviour.OnCollisionStay(Collisioncollision)是當(dāng)逗留碰撞器時(shí)不斷執(zhí)行。3.2D觸發(fā)器與碰撞器的區(qū)別1)觸發(fā)信息檢測(cè)使用的相關(guān)函數(shù)MonoBehaviour.OnTriggerEnter2D(Collider2D)是當(dāng)進(jìn)入2D觸發(fā)器時(shí)執(zhí)行一次。MonoBehaviour.OnTriggerExit2D(Collider2D)是當(dāng)退出2D觸發(fā)器時(shí)執(zhí)行一次。MonoBehaviour.OnTriggerStay2D(Collider2D)是當(dāng)逗留2D觸發(fā)器時(shí)不斷執(zhí)行。2)碰撞信息檢測(cè)使用的相關(guān)函數(shù)MonoBehaviour.OnCollisionEnter2D(Collision2D)是當(dāng)進(jìn)入2D碰撞器時(shí)執(zhí)行一次。MonoBehaviour.OnCollisionExit2D(Collision2D)是當(dāng)退出2D碰撞器時(shí)執(zhí)行一次。MonoBehaviour.OnCollisionStay2D(Collision2D)是當(dāng)逗留2D碰撞器時(shí)不斷執(zhí)行。4.物體發(fā)生碰撞的必要條件碰撞器是觸發(fā)器的載體,而觸發(fā)器只是碰撞器的一個(gè)屬性。發(fā)生碰撞的兩個(gè)物體都必須帶有碰撞器,其中一個(gè)物體還必須帶有Rigidbody剛體。碰撞器是一群組件,它包含了很多種類,如BoxCollider,MeshCollider等,這些碰撞器應(yīng)用的場(chǎng)合不同,但都必須加到游戲?qū)ο笊?。觸發(fā)器只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性復(fù)選框。5.產(chǎn)生碰撞的條件若要產(chǎn)生碰撞,必須雙方都要有碰撞器。運(yùn)動(dòng)的一方一定要有剛體,另一方有無(wú)剛體則無(wú)所謂。注:如果運(yùn)動(dòng)的一方無(wú)剛體,它去碰撞靜止的剛體就相當(dāng)于沒(méi)有撞上。6.接觸的兩種方式Collision碰撞會(huì)造成物理碰撞,可以在碰撞時(shí)執(zhí)行OnCollision事件。Trigger觸發(fā)則會(huì)取消所有的物理碰撞,可以在觸發(fā)時(shí)執(zhí)行OnTrigger事件。注:兩個(gè)物體接觸不可能同時(shí)產(chǎn)生碰撞和觸發(fā),最多產(chǎn)生其中一種。但是可以AB兩個(gè)物體產(chǎn)生碰撞,而AC兩個(gè)物體產(chǎn)生觸發(fā)。7.產(chǎn)生不同方式接觸的條件1)Collision碰撞(1)雙方都有碰撞體。(2)運(yùn)動(dòng)的一方必須有剛體。(3)雙方不可同時(shí)勾選Kinematic選項(xiàng)。(4)雙方都不可勾選Trigger觸發(fā)器。2)Trigger觸發(fā)(1)雙方都有碰撞體,運(yùn)動(dòng)的一方必須是剛體。(2)至少一方勾選Trigger觸發(fā)器。3.3.4關(guān)節(jié)1.關(guān)節(jié)的分類關(guān)節(jié)可分為鉸鏈關(guān)節(jié)、固定關(guān)節(jié)、彈簧關(guān)節(jié)、角色關(guān)節(jié)和可配置關(guān)節(jié)五大類。2.鉸鏈關(guān)節(jié)鉸鏈關(guān)節(jié)(HingeJoint)將兩個(gè)物體以鏈條的形式綁在一起,當(dāng)力量大于鏈條的固定力矩時(shí),兩個(gè)物體就會(huì)產(chǎn)生相互的拉力。鉸鏈關(guān)節(jié)將兩個(gè)剛體組合在一起,對(duì)剛體進(jìn)行約束,讓它們就像通過(guò)鉸鏈連接一樣移動(dòng)。鉸鏈關(guān)節(jié)非常適合用于門,但也可用于模擬鏈條、鐘擺等對(duì)象。鉸鏈關(guān)節(jié)具體屬性如圖3.30、圖3.31所示,屬性具體內(nèi)容如表3.5所示。3.固定關(guān)節(jié)

固定關(guān)節(jié)將兩個(gè)物體永遠(yuǎn)以相對(duì)的位置固定在一起,即使發(fā)生物理改變,它們之間的相對(duì)位置也不變。這類似于管控,但是實(shí)現(xiàn)的方式是通過(guò)物理系統(tǒng)而不是變換(Transform)層級(jí)視圖。使用固定關(guān)節(jié)的最佳場(chǎng)合是在希望對(duì)象可以輕松相互分離時(shí),或者在沒(méi)有管控情況下連接兩個(gè)對(duì)象的移動(dòng),固定關(guān)節(jié)的屬性如圖3.32、圖3.33所示。固定關(guān)節(jié)的屬性介紹如表3.6所示。4.彈簧關(guān)節(jié)

彈簧關(guān)節(jié)將兩個(gè)物體以彈簧的形式綁定在一起,擠壓它們會(huì)得到向外的力,拉伸它們將得到向里的力,彈簧關(guān)節(jié)具體屬性如圖3.34、圖3.35所示。

彈簧關(guān)節(jié)將兩個(gè)剛體連接在一起,但允許兩者之間的距離改變,就好像它們通過(guò)彈簧連接一樣。彈簧關(guān)節(jié)的屬性介紹如表3.7所示。5.角色關(guān)節(jié)

角色關(guān)節(jié)可以模擬角色的骨骼關(guān)節(jié),主要用于布娃娃效果。此類關(guān)節(jié)是延長(zhǎng)的球窩關(guān)節(jié),可在每個(gè)軸上限制該關(guān)節(jié)。角色關(guān)節(jié)提供了很多約束運(yùn)動(dòng)的可能性,就像使用萬(wàn)向節(jié)一樣。

扭轉(zhuǎn)軸可在很大程度上控制關(guān)節(jié)活動(dòng)的上限和下限,允許按照度數(shù)指定上限和下限。設(shè)置LowTwistLimit→Limit中的值為-30和HighTwistLimit→Limit中的值為60可將圍繞扭轉(zhuǎn)軸的旋轉(zhuǎn)范圍限制在-30~60度之間。Swing1Limit可限制擺動(dòng)軸的旋轉(zhuǎn)范圍,且限制角度是對(duì)稱的。因此該值為30會(huì)將旋轉(zhuǎn)限制在?-30~30度之間。Swing2Limit的軸未顯示在輔助圖標(biāo)上,但該軸垂直于其他兩個(gè)軸,且角度是對(duì)稱的,因此該值為40可將圍繞該軸的旋轉(zhuǎn)范圍限制在?-40~40度之間。角色關(guān)節(jié)屬性如圖3.36、圖3.37所示。角色關(guān)節(jié)的屬性介紹如表3.8所示。6.可配置關(guān)節(jié)

可配置關(guān)節(jié)可以模擬任意關(guān)節(jié)的效果??膳渲藐P(guān)節(jié)組件支持用戶自定義關(guān)節(jié),它開(kāi)放了Physics引擎中所有與關(guān)節(jié)相關(guān)的屬性,因此可像其他的類型的關(guān)節(jié)那樣來(lái)創(chuàng)建各種行為??膳渲藐P(guān)節(jié)有兩類主要的功能,即移動(dòng)/旋轉(zhuǎn)限制和移動(dòng)/旋轉(zhuǎn)加速器。

可配置關(guān)節(jié)屬性如圖3.38、圖3.39所示,屬性詳細(xì)內(nèi)容見(jiàn)表3.9所示。3.3.5物理材質(zhì)

物理材質(zhì)用于調(diào)整碰撞對(duì)象的摩擦力和反彈效果。要?jiǎng)?chuàng)建物理材質(zhì),可從菜單欄中依次選擇Assets→Create→PhysicMaterial后,將物理材質(zhì)從Project視圖拖入到場(chǎng)景中的碰撞體。

當(dāng)碰撞體相互作用時(shí),它們的表面需要模擬所應(yīng)代表的材質(zhì)的屬性,雖然碰撞時(shí)碰撞體的形狀不會(huì)變形,但可以使用物理材質(zhì)配置碰撞體的摩擦力和彈力,要進(jìn)行多次試驗(yàn)和糾錯(cuò)后獲得正確參數(shù),比如冰材質(zhì)將具有零(或非常低的)摩擦力,而橡膠材質(zhì)則具有高摩擦力和近乎完美的彈性。請(qǐng)注意,由于歷史原因,3D資源實(shí)際上稱為PhysicMaterial(物理材質(zhì))(不帶s),而等效的2D資源則稱為PhysicsMaterial2D(2D物理材質(zhì))(帶s)。物理材質(zhì)的屬性如圖3.40所示。3.3.6角色控制器

第一人稱或第三人稱在游戲中的角色通常需要一些基于碰撞的物理效果,這樣角色就不會(huì)跌穿地板或穿過(guò)墻壁。但是,通常情況下,角色的加速度和移動(dòng)在物理上并不真實(shí),因此角色可以不受動(dòng)量影響而幾乎瞬間加速、制動(dòng)和改變方向。

在3D物理中,可以使用角色控制器創(chuàng)建此類行為。該組件為角色提供了一個(gè)始終處于直立狀態(tài)的簡(jiǎn)單膠囊碰撞體??刂破饔凶约旱奶厥夂瘮?shù)來(lái)設(shè)置對(duì)象的速度和方向,但與真正的碰撞體不同,控制器不需要?jiǎng)傮w,動(dòng)量效果也不真實(shí),如圖3.41所示。

角色控制器無(wú)法穿過(guò)場(chǎng)景中的靜態(tài)碰撞體,因此將緊貼地板并被墻壁阻擋??刂破骺梢栽谝苿?dòng)時(shí)將剛體對(duì)象推到一邊,但不會(huì)被接近的碰撞加速。這意味著可以使用標(biāo)準(zhǔn)3D碰撞體來(lái)創(chuàng)建供控制器行走的場(chǎng)景,但不受角色本身的真實(shí)物理行為的限制,角色控制器屬性如圖3.42、圖3.43所示。角色控制器的基本屬性介紹如表3.11所示。3.4UGUI3.4.1畫布1.畫布概述

畫布(Canvas)是容納所有UI元素的區(qū)域,所有UI元素都必須是畫布的子項(xiàng),畫布如圖3.44所示。依次選擇菜單欄中的GameObject→UI→Image創(chuàng)建圖像,此時(shí)如果場(chǎng)景中還沒(méi)有畫布,則會(huì)自動(dòng)創(chuàng)建畫布,UI元素為此畫布的子項(xiàng)。畫布區(qū)域在Scene視圖中顯示為矩形,能夠比較容易地定位UI元素,畫布使用EventSystem對(duì)象來(lái)協(xié)助消息系統(tǒng)。2.繪制元素的順序

畫布中的UI元素按照它們?cè)贖ierarchy中顯示的順序繪制。首先繪制第一個(gè)子項(xiàng),然后繪制第二個(gè)子項(xiàng),依次類推。如果兩個(gè)UI元素重疊,則后一個(gè)元素將顯示在前一個(gè)元素之上。

要更改元素的顯示順序,只需在Hierarchy中拖動(dòng)元素進(jìn)行重新排序。也可以通過(guò)在變換組件上使用SetAsFirstSibling、SetAsLastSibling和SetSiblingIndex方法從腳本中控制順序。3.渲染模式

畫布具有渲染模式(RenderMode)設(shè)置,可用于在屏幕空間或世界空間中進(jìn)行渲染。3.4.2基本布局

本部分將介紹如何相對(duì)于畫布以及彼此來(lái)定位UI元素??梢来芜x擇菜單欄中的GameObject→UI→Image創(chuàng)建一個(gè)圖像。1.矩形工具

為了便于布局,每個(gè)UI元素都表示為矩形??墒褂霉ぞ邫谥械木匦喂ぞ?RectTool)在Scene視圖中操縱此矩形。矩形工具既可用于Unity的2D功能,也可用于UI,甚至還可用于3D對(duì)象,如圖3.45所示。

使用矩形工具可對(duì)UI元素進(jìn)行移動(dòng)、大小調(diào)整和旋轉(zhuǎn)。選擇UI元素后,可通過(guò)單擊矩形內(nèi)的任意位置并拖動(dòng)來(lái)對(duì)元素進(jìn)行移動(dòng)。通過(guò)單擊邊或角并拖動(dòng),可調(diào)整元素大小。若要旋轉(zhuǎn)元素,則可在稍微遠(yuǎn)離角點(diǎn)的位置懸停光標(biāo),直到光標(biāo)看起來(lái)像旋轉(zhuǎn)符號(hào),然后單擊并向任一方向拖動(dòng)進(jìn)行旋轉(zhuǎn)。與其他工具一樣,矩形工具使用工具欄中設(shè)置的當(dāng)前軸心模式和空間。使用UI時(shí),通常最好將這些設(shè)置保持為Pivot和Local,如圖3.46所示。2.矩形變換

矩形變換是一種用于所有UI元素的新型變換組件,而不是常規(guī)的變換組件。與常規(guī)變換一樣,矩形變換具有位置、旋轉(zhuǎn)和縮放,但還具有寬度和高度,用于指定矩形的尺寸,如圖3.47所示。3.調(diào)整大小與縮放

使用矩形工具可以對(duì)2D系統(tǒng)中的精靈以及3D對(duì)象進(jìn)行大小更改,改變對(duì)象的局部縮放。但是,在帶有矩形變換的對(duì)象上使用時(shí),該工具改變的是寬度和高度,局部縮放將保持不變。該調(diào)整不會(huì)影響字體大小、切片圖像上的邊框等。4.軸心

旋轉(zhuǎn)、大小調(diào)整和縮放都是圍繞軸心進(jìn)行的,因此軸心的位置會(huì)影響旋轉(zhuǎn)、大小調(diào)整或縮放的結(jié)果。工具欄中的Pivot按鈕設(shè)置為軸心模式時(shí),可在Scene視圖中移動(dòng)矩形變換的軸心。5.錨點(diǎn)

矩形變換包含一種稱為錨點(diǎn)的布局概念,錨點(diǎn)在Scene視圖中顯示為4個(gè)小三角形控制柄,如圖3.48所示,錨點(diǎn)信息也顯示在Inspector中,4個(gè)錨點(diǎn)相當(dāng)于四根釘子,釘在Image的父級(jí)元素上,4個(gè)實(shí)心藍(lán)點(diǎn)相當(dāng)于4個(gè)紐扣,縫在Image的4個(gè)邊上。6.錨點(diǎn)預(yù)設(shè)

在Inspector中,可在矩形變換組件的左上角找到AnchorPreset按鈕。單擊該按鈕將顯示AnchorPresets下拉選單,從此選單中可以快速選擇一些最常用的錨定選項(xiàng),如圖3.49所示??蓪I元素錨定到父項(xiàng)的邊或中間,或者與父項(xiàng)大小一起拉伸。水平錨定和垂直錨定是獨(dú)立的。AnchorPresets按鈕將顯示當(dāng)前所選的預(yù)設(shè)選項(xiàng)(如果有)。如果水平軸或垂直軸上的錨點(diǎn)設(shè)置為與任何預(yù)設(shè)不同的位置,則會(huì)顯示自定義選項(xiàng)。

通過(guò)單擊Anchors擴(kuò)展箭頭可顯示錨點(diǎn)數(shù)值字段(如果這些字段尚不可見(jiàn)),AnchorMin對(duì)應(yīng)于Scene視圖中的左下角錨點(diǎn)控制柄,而

AnchorMax對(duì)應(yīng)于右上角控制柄。

根據(jù)錨點(diǎn)是在一起(產(chǎn)生固定的寬度和高度)還是分開(kāi)(使得矩形與父矩形一起拉伸),矩形的位置字段顯示不同。當(dāng)所有錨點(diǎn)控制柄在一起時(shí),顯示的字段為PosX、PosY、Width和Height。PosX和PosY值表示軸心相對(duì)于錨點(diǎn)的位置,如圖3.50所示。

當(dāng)錨點(diǎn)分開(kāi)時(shí),字段可能部分或完全變?yōu)長(zhǎng)eft、Right、Top和Bottom,這些字段定義了由錨點(diǎn)定義的矩形內(nèi)的填充。如果錨點(diǎn)在水平方向分開(kāi),則使用Left和Right字段,如果在垂直方向分開(kāi),則使用Top和Bottom字段。

注意,更改錨點(diǎn)或軸心字段中的值通常會(huì)反向調(diào)整定位值,以使矩形保持原位。如果不需要此行為,則可通過(guò)單擊Inspector中的

R

按鈕啟用

Raweditmode。這樣在更改錨點(diǎn)和軸心值時(shí)可以不改變?nèi)魏纹渌?,因此可能?huì)導(dǎo)致矩形在視覺(jué)上出現(xiàn)移動(dòng)或大小調(diào)整,因?yàn)榫匦蔚奈恢煤痛笮∪Q于錨點(diǎn)和軸心值。3.4.3可視組件

隨著UI系統(tǒng)的引入,Unity添加了各種新組件來(lái)幫助開(kāi)發(fā)者創(chuàng)建GUI特定功能。本部分將介紹可創(chuàng)建的新組件的基本信息。1.文本(Text)Text組件可以設(shè)置字體、字體樣式、字體大小以及文本是否支持富文本功能,如圖3.51、圖3.52所示。有一些選項(xiàng)可以設(shè)置文本的對(duì)齊方式、水平和垂直溢出的設(shè)置(控制文本大于矩形的寬度或高度時(shí)會(huì)發(fā)生什么情況)以及一個(gè)使文本調(diào)整大小來(lái)適應(yīng)可用空間的BestFit選項(xiàng)。2.圖像(Image)

圖像屬性如圖3.53、圖3.54所示,圖像具有矩形變換組件和圖像組件,可在TargetGraphic字段下將精靈應(yīng)用于圖像組件,并可在Color字段中設(shè)置其顏色,還可將材質(zhì)應(yīng)用于圖像組件。ImageType字段可定義應(yīng)用的精靈顯示方式,提供的選項(xiàng)包括:(1)Simple:均勻縮放整個(gè)精靈。(2)Sliced:使用3?×?3精靈分區(qū),確保大小調(diào)整不會(huì)扭曲角點(diǎn),僅是拉伸中心部分。(3)Tiled:類似于Sliced,但僅是平鋪(重復(fù))中心部分而不是對(duì)其進(jìn)行拉伸。對(duì)于完全沒(méi)有邊框的精靈,整個(gè)精靈都是平鋪的。(4)Filled:按照與Simple相同的方式顯示精靈,不同之處是使用定義的方向、方法和數(shù)量從原點(diǎn)開(kāi)始填充精靈。

選擇Simple或Filled時(shí)顯示的SetNativeSize選項(xiàng)會(huì)將圖像重置為原始精靈大小。

通過(guò)從TextureType設(shè)置中選擇Sprite(2D/UI),可以將圖像導(dǎo)入為UI精靈。與舊的GUI精靈相比,現(xiàn)在的精靈有額外的導(dǎo)入設(shè)置,最大的區(qū)別是增加了SpriteEditor(精靈編輯器)。SpriteEditor提供圖像9切片選項(xiàng),此選項(xiàng)將圖像分成9個(gè)區(qū)域,如此一來(lái),當(dāng)精靈調(diào)整大小時(shí),角點(diǎn)就不會(huì)被拉伸或扭曲。3.原始圖像(RawImage)

圖像組件采用精靈,但原始圖像采用紋理(無(wú)邊框等)。只有在必要時(shí)才使用原始圖像,否則大多數(shù)情況都使用圖像。4.遮罩(Mask)

遮罩不是可見(jiàn)的UI控件,而是一種修改控件子元素外觀的方法。遮罩將子元素限制(即掩蓋)為父元素的形狀。因此,如果子項(xiàng)比父項(xiàng)大,則子項(xiàng)僅包含在父項(xiàng)以內(nèi)的部分才可見(jiàn)。5.效果

可視組件也可應(yīng)用各種簡(jiǎn)單效果,例如簡(jiǎn)單的投射陰影或輪廓。3.4.4交互組件

本部分將介紹UI系統(tǒng)中的交互組件,這些組件可用于處理交互,例如鼠標(biāo)或觸摸事件以及使用鍵盤或控制器進(jìn)行的交互。交互組件本身不可見(jiàn),必須與一個(gè)或多個(gè)可視元素組合才能正常工作。大多數(shù)交互組件都有一些共同點(diǎn)。這些組件是可選擇的組件,這意味著它們具有共享的內(nèi)置功能,可用于對(duì)狀態(tài)(正常、突出顯示、按下、禁用)之間的過(guò)渡進(jìn)行可視化,也可用于通過(guò)鍵盤或控制器導(dǎo)航到其他可選擇的組件。

交互組件至少有一個(gè)UnityEvent,當(dāng)用戶以特定方式與組件交互時(shí)將調(diào)用該UnityEvent。UI系統(tǒng)會(huì)捕獲并記錄從附加到UnityEvent的代碼傳出的任何異常。1.按鈕(Button)

按鈕有一個(gè)OnClickUnityEvent用于定義單擊按鈕時(shí)將執(zhí)行的操作,Button組件如圖3.55所示。2.開(kāi)關(guān)(Toggle)

開(kāi)關(guān)有一個(gè)IsOn復(fù)選框用于確定開(kāi)關(guān)當(dāng)前是打開(kāi)還是關(guān)閉狀態(tài)。當(dāng)用戶單擊開(kāi)關(guān)時(shí),此值將反轉(zhuǎn),并可相應(yīng)打開(kāi)或關(guān)閉可視復(fù)選標(biāo)記。按鈕還有一個(gè)OnValueChangedUnityEvent用于定義更改該值時(shí)將執(zhí)行的操作,Toggle組件如圖3.56所示。3.滑動(dòng)條(Slider)

滑動(dòng)條具有十進(jìn)制數(shù)值,用戶可以在最小值和最大值之間拖動(dòng)?;瑒?dòng)條可以是水平或垂直的。滑動(dòng)條也有一個(gè)OnValueChangedUnityEvent用于定義更改該值時(shí)將執(zhí)行的操作,Slider組件如圖3.57所示。4.滾動(dòng)條(Scrollbar)

滾動(dòng)條具有一個(gè)介于0~1之間的十進(jìn)制數(shù)值。當(dāng)用戶拖動(dòng)滾動(dòng)條時(shí),該值將相應(yīng)變化。滾動(dòng)條通常與滾動(dòng)矩形(ScrollRect)和遮罩(Mask)一起用于創(chuàng)建滾動(dòng)視圖。滾動(dòng)條具有一個(gè)介于0~1之間的Size值,該值用于確定控制柄的大小(占整個(gè)滾動(dòng)條長(zhǎng)度的一個(gè)比例)。滾動(dòng)條通常由另一個(gè)組件控制,旨在指示滾動(dòng)視圖中可見(jiàn)的內(nèi)容比例。滾動(dòng)矩形組件可自動(dòng)執(zhí)行此過(guò)程。滾動(dòng)條可以是水平或垂直的?;瑒?dòng)條也有一個(gè)OnValueChangedUnityEvent用于定義更改該值時(shí)將執(zhí)行的操作。5.下拉選單(Dropdown)

下拉選單有一個(gè)可供選擇的選項(xiàng)列表??蔀槊總€(gè)選項(xiàng)指定文本字符串和可選的圖像,可在Inspector中進(jìn)行此設(shè)置,也可從代碼中進(jìn)行動(dòng)態(tài)設(shè)置。下拉選單有一個(gè)OnValueChangedUnityEvent用于定義當(dāng)更改當(dāng)前選擇的選項(xiàng)時(shí)將執(zhí)行的操作,Dropdown屬性如圖3.58所示。6.輸入字段(InputField)

輸入字段用于使文本元素的文本可由用戶編輯。輸入字段有一個(gè)UnityEvent用于定義當(dāng)更改文本內(nèi)容時(shí)將執(zhí)行的操作,另一個(gè)用于定義用戶完成編輯后將執(zhí)行的操作,InputField組件如圖3.59所示。7.滾動(dòng)矩形/滾動(dòng)視圖(ScrollRect/ScrollView)

當(dāng)占用大量空間的內(nèi)容需要在小區(qū)域中顯示時(shí),可使用滾動(dòng)矩形。滾動(dòng)矩形提供了滾動(dòng)此內(nèi)容的功能。通常情況下,滾動(dòng)矩形與遮罩(Mask)相結(jié)合來(lái)創(chuàng)建滾動(dòng)視圖,在產(chǎn)生的視圖中只有滾動(dòng)矩形內(nèi)的可滾動(dòng)內(nèi)容為可見(jiàn)狀態(tài)。此外,滾動(dòng)矩形還可與一個(gè)或兩個(gè)可拖動(dòng)以便水平或垂直滾動(dòng)的滾動(dòng)條(Scrollbar)組合使用,ScrollRect/ScrollView組件如圖3.60所示。3.5EVENT事件

使用事件系統(tǒng)可以根據(jù)輸入(即鍵盤、鼠標(biāo)、觸摸或自定義輸入)將事件發(fā)送到應(yīng)用程序中的對(duì)象,事件系統(tǒng)包含一些共同協(xié)作以發(fā)送事件的組件。

將事件系統(tǒng)組件添加到游戲?qū)ο髸r(shí),應(yīng)該會(huì)注意到該組件未公開(kāi)太多功能,這是因?yàn)槭录到y(tǒng)本身設(shè)計(jì)為事件系統(tǒng)模塊之間通信的管理器和協(xié)調(diào)器。

事件系統(tǒng)的主要作用如下:(1)管理視為選中狀態(tài)的游戲?qū)ο蟆?2)管理正在使用的輸入模塊。(3)管理射線投射(如果需要)。(4)根據(jù)需要更新所有輸入模塊。

輸入模塊包含定義事件系統(tǒng)行為方式的主要邏輯,可用于:(1)處理輸入。(2)管理事件狀態(tài)。(3)將事件發(fā)送到場(chǎng)景對(duì)象。

事件系統(tǒng)中一次只能有一個(gè)輸入模塊處于激活狀態(tài),這些輸入模塊必須是與事件系統(tǒng)組件位于同一游戲?qū)ο笊系慕M件。如果希望編寫自定義輸入模塊,建議發(fā)送Unity中現(xiàn)有UI組件支持的事件,也可以擴(kuò)展事件和編寫自定義的事件。3.5.1射線投射器和消息系統(tǒng)1.射線投射器

射線投射器用于確定指針在哪個(gè)對(duì)象上方,輸入模塊通常使用場(chǎng)景中配置的射線投射器來(lái)計(jì)算指針設(shè)備位于哪個(gè)對(duì)象上方,默認(rèn)情況下提供了以下3種射線投射器:(1)圖形射線投射器(GraphicRaycaster):用于UI元素。(2)2D物理射線投射器(Physics2DRaycaster):用于2D物理元素。(3)物理射線投射器(PhysicsRaycaster):用于3D物理元素。

如果在場(chǎng)景中配置了2D/3D射線投射器,很容易讓非UI元素接收來(lái)自輸入模塊的消息,只需附加一個(gè)腳本來(lái)實(shí)現(xiàn)其中一個(gè)事件接口即可。2.消息系統(tǒng)

新的UI系統(tǒng)使用一種消息系統(tǒng)來(lái)取代SendMessage,該系統(tǒng)是純C#系統(tǒng),旨在解決SendMessage存在的一些問(wèn)題。該系統(tǒng)使用可在MonoBehaviour上實(shí)現(xiàn)的自定義接口來(lái)指示組件能夠從消息系統(tǒng)接收回調(diào)。調(diào)用時(shí)會(huì)指定目標(biāo)游戲?qū)ο?,該調(diào)用將在游戲?qū)ο蟮乃?實(shí)現(xiàn)了指定接口以據(jù)此發(fā)出該調(diào)用的)組件上發(fā)出。借助消息系統(tǒng)可傳遞自定義用戶數(shù)據(jù),并可指定事件應(yīng)在游戲?qū)ο髮蛹?jí)視圖中傳播的距離:應(yīng)該僅為指定的游戲?qū)ο髨?zhí)行,還是應(yīng)該在子對(duì)象和父對(duì)象上也執(zhí)行。除此之外,消息框架還提供helper函數(shù)來(lái)搜索和查找實(shí)現(xiàn)了給定消息接口的游戲?qū)ο蟆O⑾到y(tǒng)是通用型系統(tǒng),不僅可用于UI系統(tǒng),還可用于一般游戲代碼。添加自定義消息事件相對(duì)簡(jiǎn)單,借助UI系統(tǒng)用于所有事件處理的相同框架即可實(shí)現(xiàn)。

如果希望定義自定義消息,此過(guò)程相對(duì)簡(jiǎn)單。在UnityEngine.EventSystems命名空間中,有一個(gè)名為IEventSystemHandler的基本接口,從此接口擴(kuò)展的任何內(nèi)容都可以視為通過(guò)消息系統(tǒng)接收事件的目標(biāo)。示例代碼如下:

一旦定義了此接口,即可由MonoBehaviour實(shí)現(xiàn)。此接口實(shí)現(xiàn)后,定義了在針對(duì)此MonoBehaviour游戲?qū)ο蟀l(fā)出指定消息時(shí)將會(huì)執(zhí)行的函數(shù)。示例代碼如下:

現(xiàn)在有了可接收消息的腳本之后,需要發(fā)出消息。通常,此消息用于響應(yīng)發(fā)生的某個(gè)松散耦合事件。例如,在UI系統(tǒng)中,為PointerEnter和PointerExit等事件發(fā)出事件,以及為了響應(yīng)用戶在應(yīng)用程序中的輸入而發(fā)生的各種其他事件。要發(fā)送消息,可使用一個(gè)靜態(tài)helper類來(lái)執(zhí)行此操作。在參數(shù)方面,需要消息的目標(biāo)對(duì)象、一些特定于用戶的數(shù)據(jù)以及一個(gè)映射到所需目標(biāo)消息接口中特定函數(shù)的仿函數(shù)(functor)。示例代碼如下:

此代碼將在游戲?qū)ο竽繕?biāo)上實(shí)現(xiàn)了ICustomMessageTarget接口的所有組件上執(zhí)行Message1函數(shù)。ExecuteEvents類的腳本文檔中介紹了執(zhí)行函數(shù)的其他形式,例如在子對(duì)象或父對(duì)象中執(zhí)行。3.5.2輸入模塊和支持的事件1.輸入模塊

輸入模塊可用于配置和自定義事件系統(tǒng)的主要邏輯。系統(tǒng)提供了兩個(gè)開(kāi)箱即用的輸入模塊,一個(gè)用于獨(dú)立平臺(tái),另一個(gè)用于觸控輸入。每個(gè)模塊都會(huì)在給定配置上預(yù)期接收和分發(fā)事件。

輸入模塊是執(zhí)行事件系統(tǒng)“業(yè)務(wù)邏輯”的位置。啟用事件系統(tǒng)后,它會(huì)查看所連接的輸入模塊,并將更新處理傳遞給具體模塊。

輸入模塊可根據(jù)希望支持的輸入系統(tǒng)進(jìn)行擴(kuò)展或修改。輸入系統(tǒng)的目的是將特定于硬件的輸入映射到通過(guò)消息系統(tǒng)發(fā)送的事件。

內(nèi)置的輸入模塊可支持常見(jiàn)的游戲配置,如觸控輸入、控制器輸入、鍵盤輸入和鼠標(biāo)輸入。如果在MonoBehaviour上實(shí)現(xiàn)特定接口,這些輸入模塊則會(huì)向應(yīng)用程序中的控件發(fā)送各種事件,所有UI組件都實(shí)現(xiàn)了對(duì)具體組件有意義的接口。2.支持的事件

事件系統(tǒng)支持許多事件,并可在用戶編寫的自定義輸入模塊中進(jìn)一步自定義它們。獨(dú)立輸入模塊和觸摸輸入模塊支持的事件由接口提供,通過(guò)實(shí)現(xiàn)該接口即可在MonoBehaviour上實(shí)現(xiàn)這些事件。如果配置了有效的事件系統(tǒng),則會(huì)在正確的時(shí)間調(diào)用事件。常用事件及作用如下:(1)IPointerEnterHandler-OnPointerEnter:當(dāng)指針進(jìn)入對(duì)象時(shí)調(diào)用。(2)IPointerExitHandler-OnPointerExit:當(dāng)指針退出對(duì)象時(shí)調(diào)用。(3)IPointerDownHandler-OnPointerDown:在對(duì)象上按下指針時(shí)調(diào)用。(4)IPointerUpHandler-OnPointerUp:松開(kāi)指針時(shí)調(diào)用(在指針正在點(diǎn)擊的游戲?qū)ο笊险{(diào)用)。(5)IPointerClickHandler-OnPointerClick:在同一對(duì)象上按下再松開(kāi)指針時(shí)調(diào)用。(6)IInitializePotentialDragHandler-OnInitializePotentialDrag:找到拖動(dòng)目標(biāo)時(shí)調(diào)用,可用于初始化值。(7)IBeginDragHandler-OnBeginDrag:即將開(kāi)始拖動(dòng)時(shí)在拖動(dòng)對(duì)象上調(diào)用。(8)IDragHandler-OnDrag:發(fā)生拖動(dòng)時(shí)在拖動(dòng)對(duì)象上調(diào)用。(9)IEndDragHandler-OnEndDrag:拖動(dòng)完成時(shí)在拖動(dòng)對(duì)象上調(diào)用。(10)IDropHandler-OnDrop:在拖動(dòng)目標(biāo)對(duì)象上調(diào)用。(11)IScrollHandler-OnScroll:當(dāng)鼠標(biāo)滾輪滾動(dòng)時(shí)調(diào)用。(12)IUpdateSelectedHandler-OnUpdateSelected:每次勾選時(shí)在選定對(duì)象上調(diào)用。(13)ISelectHandler-OnSelect:當(dāng)對(duì)象成為選定對(duì)象時(shí)調(diào)用。(14)IDeselectHandler-OnDeselect:取消選擇選定對(duì)象時(shí)調(diào)用。(15)IMoveHandler-OnMove:發(fā)生移動(dòng)事件(上、下、左、右等)時(shí)調(diào)用。(16)ISubmitHandler-OnSubmit:按下Submit按鈕時(shí)調(diào)用。(17)ICancelHandler-OnCancel:按下Cancel按鈕時(shí)調(diào)用。3.5.3事件系統(tǒng)參考1.事件系統(tǒng)管理器

事件系統(tǒng)負(fù)責(zé)控制構(gòu)成事件的所有其他元素,該系統(tǒng)會(huì)協(xié)調(diào)哪個(gè)輸入模塊當(dāng)前處于激活狀態(tài),哪個(gè)游戲?qū)ο螽?dāng)前被視為“已選中”,以及許多其他高級(jí)事件系統(tǒng)概念。

每次“更新”時(shí),事件系統(tǒng)都會(huì)收到調(diào)用、查看其輸入模塊并確定應(yīng)該將哪個(gè)輸入模塊用于此活動(dòng),然后系統(tǒng)會(huì)將處理委托給模塊。2.圖形射線投射器

圖形射線投射器用于對(duì)畫布進(jìn)行射線投射。射線投射器查看畫布上的所有圖形,并確定是否有任何圖形被射中??蓪D形射線投射器配置為忽略背面圖形以及被其前面的2D或3D對(duì)象阻擋。如果希望將此元素的處理強(qiáng)制為射線投射的前面或后面,也可應(yīng)用手動(dòng)優(yōu)先級(jí)。3.物理射線投射器

物理射線投射器對(duì)場(chǎng)景中的3D對(duì)象進(jìn)行射線投射,因此可將消息發(fā)送到實(shí)現(xiàn)事件接口的3D物理對(duì)象。4.2D物理射線投射器2D物理射線投射器對(duì)場(chǎng)景中的2D對(duì)象進(jìn)行射線投射,因此可將消息發(fā)送到實(shí)現(xiàn)事件接口的2D物理對(duì)象。此情況下需要使用攝像機(jī)游戲?qū)ο?,并?huì)將2D物理射線投射器添加到攝像機(jī)游戲?qū)ο?如果未將3D物理射線投射器添加到攝像機(jī)游戲?qū)ο?。5.獨(dú)立輸入模塊

根據(jù)設(shè)計(jì),獨(dú)立輸入模塊與控制器/鼠標(biāo)輸入具有相同的功能。響應(yīng)輸入時(shí)會(huì)發(fā)送按鈕按壓、拖拽等類似事件。當(dāng)鼠標(biāo)/輸入設(shè)備移動(dòng)時(shí),該模塊將指針事件發(fā)送到組件,并使用圖形射線投射器和物理射線投射器來(lái)計(jì)算給定指針設(shè)備當(dāng)前指向的元素。可以配置這些射線投射器來(lái)檢測(cè)或忽略場(chǎng)景的某些部分,從而滿足開(kāi)發(fā)要求。該模塊會(huì)發(fā)送Move事件和Submit/Cancel事件來(lái)響應(yīng)通過(guò)Input窗口跟蹤的輸入。對(duì)于鍵盤和控制器輸入均是如此??稍谀K的檢視面板中配置跟蹤的軸和鍵。6.觸摸輸入模塊

觸摸輸入模塊設(shè)計(jì)用于觸摸設(shè)備,可發(fā)送觸摸和拖動(dòng)操作的指針事件來(lái)響應(yīng)用戶輸入,該模塊支持多點(diǎn)觸控。該模塊使用場(chǎng)景配置的射線投射器來(lái)計(jì)算當(dāng)前正在觸摸的元素。每次當(dāng)前觸摸操作都將相應(yīng)發(fā)出射線投射。7.事件觸發(fā)器

事件觸發(fā)器從事件系統(tǒng)接收事件,并為每個(gè)事件調(diào)用已注冊(cè)的函數(shù)。

事件觸發(fā)器可用于指定希望為每個(gè)事件系統(tǒng)事件調(diào)用的函數(shù),可以為單個(gè)事件分配多個(gè)函數(shù),每當(dāng)事件觸發(fā)器收到該事件時(shí),將調(diào)用這些函數(shù)。

注意,將事件觸發(fā)器組件附加到游戲?qū)ο髮⑹乖搶?duì)象攔截所有事件,并且不會(huì)從此對(duì)象開(kāi)始發(fā)生事件冒泡。

通過(guò)單擊AddNewEventType按鈕,可有選擇地將每個(gè)支持的事件包含在事件觸發(fā)器中。4.1NGUI

4.2動(dòng)畫系統(tǒng)

4.3Animator(動(dòng)畫)

4.4動(dòng)畫層及事件應(yīng)用

4.5燈光系統(tǒng)

4.6粒子系統(tǒng)4.1NGUI4.1.1NGUI簡(jiǎn)介在Unity4.6之前的版本中,引擎自帶的UI系統(tǒng)功能不完善,市面上大多數(shù)項(xiàng)目進(jìn)行UI界面開(kāi)發(fā)的時(shí)候,使用的都是第三方插件NGUI。NGUI是一組用C#語(yǔ)言編寫的,并專門為Unity引擎所使用的插件。NGUI的第一個(gè)版本于2011年12月面世,經(jīng)過(guò)10年的發(fā)展和沉淀,現(xiàn)如今它已經(jīng)成為世界上使用最廣泛且最成熟的UnityUI插件,完美地彌補(bǔ)了Unity引擎本機(jī)GUI系統(tǒng)的各種缺點(diǎn)??梢哉f(shuō)NGUI是Unity平臺(tái)最強(qiáng)大的第三方UI系統(tǒng)。4.1.2下載與安裝1.下載(1)必須先在Unity商店中購(gòu)買NGUI插件,然后才能使用。(2)在互聯(lián)網(wǎng)搜索NGUI插件,下載后直接拖入U(xiǎn)nity面板即可。2.安裝在一個(gè)Unity項(xiàng)目上導(dǎo)入NGUI插件資源包,導(dǎo)入NGUI后,“NGUI”菜單將出現(xiàn)在Unity的菜單欄上,其中包含NGUI的所有操作功能。NGUI插件目錄結(jié)構(gòu)如下:(1)Editor:編輯器擴(kuò)展。(2)Examples:示例工程。(3)Resources:資源文件。(4)Scripts:腳本組件。4.1.3基本控件NGUI基本控件如圖4.1所示。各基本控件說(shuō)明如下:(1)AttachaCollider:指為NGUI的某些對(duì)象添加碰撞器。如果接口是使用NGUI制作的,則只能以這種方式添加。(2)AttachanAnchor:表示已將UIAnchor腳本添加到對(duì)象,即錨點(diǎn),其作用是可以指定攝像機(jī)的9個(gè)點(diǎn)為對(duì)象的錨點(diǎn),當(dāng)攝像機(jī)的尺寸變化(即屏幕尺寸變化)時(shí),錨點(diǎn)組件可以校正其當(dāng)前的位置,將需要相對(duì)定位的組件拖入錨點(diǎn)組件中即可實(shí)現(xiàn)組件的相對(duì)定位。(3)AttachUIStretch:表示已將UIStretch腳本添加到對(duì)象以提供縮放功能。(4)MakePixelPerfect:表示已自動(dòng)為用戶調(diào)整“Transform”的大小。(5)CreateaPanel:創(chuàng)建一個(gè)面,相當(dāng)于一個(gè)容器,里面的Button、Label、CheckBox控件全部包含在Panel里面。(6)CreateaWidget:創(chuàng)建小部件的工具,例如Button、Label、Sprite等。(7)CreateaNewUI:創(chuàng)建一個(gè)新的UI界面。(8)FontMaker:創(chuàng)建字體。4.1.4高級(jí)控件下面對(duì)菜單欄ComponentFNGUI的高級(jí)控件及其作用進(jìn)行逐一介紹。1.Examples面板屬性(1)PanWithMouse:表示分配的對(duì)象將根據(jù)鼠標(biāo)的變化而移動(dòng)。(2)LookAtTarget:表示該物體朝向你的目標(biāo)物體(Target)。(3)LoadLevelOnClick:表示單擊按鈕后加載另一個(gè)場(chǎng)景,只需輸入要加載到LevelName中的場(chǎng)景名稱。(4)Spin:旋轉(zhuǎn)。(5)SpinWithMouse:跟著鼠標(biāo)旋轉(zhuǎn)。(6)TypeWriterEffect:作用于標(biāo)簽,打字風(fēng)格。(7)ChatInput:將輸入框中的內(nèi)容提交到文本框。2.UILabel面板控制1)字體文件(1)字體圖集:將用過(guò)的單詞處理成圖片使用,更適合英語(yǔ)國(guó)家。(2)TTF字體:直接使用TTF格式的字體顯示文本。2)UILabel面板屬性(1)FontSize(字體大小):控制文字顯示的大小和基本樣式普通、粗體、斜體、粗體+斜體。(2)Text(文字):UILable要顯示的文字,可以輸入多行。(3)Modifier(調(diào)節(jié)器):控制英文顯示狀態(tài),包括正常狀態(tài)、大寫狀態(tài)、小寫狀態(tài)。(4)Overflow(溢出):處理顯示當(dāng)文本大小超過(guò)Widget中Size屬性的大小。具體包括:ShrinkContent:收縮內(nèi)容(再大也無(wú)效)。ClampContent:夾緊內(nèi)容(只要能顯示幾個(gè)字就可以顯示)。UseEllipsis:是否使用省略符。ResizeFreely:調(diào)整自由(小部件中的大小會(huì)自動(dòng)與字體大小同步)。ResizeHeight:調(diào)整高度(固定寬度,自動(dòng)調(diào)整高度)。(5)Alignment(對(duì)齊方式):設(shè)置文字的對(duì)齊方式。(6)Gradient(漸變顏色):設(shè)置文字從上到下的顏色漸變。(7)Effect(特效):設(shè)置文字特效,比如:顏色描邊,投影。(8)Spacing(間距):設(shè)置文字與文字之間的間距大小。(9)ColorTint(色彩化):設(shè)置文字顯示的顏色。3.UISprite面板控制1)UISprite顯示圖片(1)創(chuàng)建UISprite組件,步驟為在菜單欄中依次選擇NGUI→Create→Sprite。(2)選擇圖集,選擇要顯示的圖片。(3)單擊Widget中的“Snap”按鈕以顯示圖片的原始大小。(4)在窗口Widget的“Aspect”中選擇“BasedOnWidth”,方便調(diào)整圖像的比例。2)UISprite面板屬性(1)Type:(類型/模式)。(2)Simple:簡(jiǎn)單模式,默認(rèn)展示效果

(3)Sliced:九宮模式,適合按鈕背景圖像處理(九宮演示處理)。(4)Tiled:平鋪模式,使用該圖片平鋪Widget中Size的區(qū)域。

(5)Flip:進(jìn)度模式,最復(fù)雜的圖片模式。其中,F(xiàn)illDir指填充方向;FillAmount指填充量;InvertFill指翻轉(zhuǎn)填充。4.UIButton面板控制1)UIButton制作按鈕(1)基礎(chǔ)說(shuō)明。在UI生成過(guò)程中,UILabel用于顯示文本,UISprite用于顯示圖像。

無(wú)論用戶界面多么復(fù)雜,它都以最基本的文本+圖像的形式顯示(創(chuàng)建),如圖4.2所示。使用鼠標(biāo)單擊UI,可以響應(yīng)該單擊的UI組件稱為UIButton??梢曰赨ILable和UISprite添加UIButton組件,以創(chuàng)建自己的個(gè)性化UI按鈕。(2)按鈕制作如圖4.3所示,具體步驟如下:①

展現(xiàn)一張圖片或者一段文字。②

在菜單欄依次點(diǎn)擊NGUI→Attach→Collider確定可以點(diǎn)擊的區(qū)域,其實(shí)點(diǎn)擊按鈕的操作就是在這個(gè)Collider區(qū)域進(jìn)行交互的。③

在菜單欄依次點(diǎn)擊NGUI→Attach→ButtonScript附加按鈕組件。

2)UIButton面板屬性(1)UIButton:將鼠標(biāo)置于按鈕上更改目標(biāo)對(duì)象的顏色。(2)UIButtonScale:將鼠標(biāo)置于按鈕上使目標(biāo)對(duì)象變大或變小,在“Hover”下調(diào)整X,Y,Z的比例。(3)UIButtonOffset:將鼠標(biāo)放在按鈕上移動(dòng)目標(biāo)對(duì)象。(4)UIButtonSound:鼠標(biāo)點(diǎn)擊按鈕發(fā)出聲音。(5)UIButtonActivate:用鼠標(biāo)單擊按鈕后,目標(biāo)對(duì)象將從禁用狀態(tài)更改為啟用狀態(tài)(觸發(fā)對(duì)象)。(6)Colors:用顏色描述按鈕的4種狀態(tài)。如果用戶不希望顏色影響圖片效果,則可以選擇所有四種顏色為白色。(7)UIButtonRotation:將鼠標(biāo)移至按鈕后,目標(biāo)對(duì)象旋轉(zhuǎn)一定程度,在“Hover”下調(diào)整X,Y,Z旋轉(zhuǎn)的程度。(8)UIButtonTween:用鼠標(biāo)單擊按鈕后,將轉(zhuǎn)換目標(biāo)對(duì)象。Tween組件中的變換需要添加到目標(biāo)對(duì)象,并且需要從一開(kāi)始就啟用目標(biāo)對(duì)象的變換,否則當(dāng)用戶開(kāi)始運(yùn)行時(shí)它將顯示在游戲轉(zhuǎn)換中。(9)UIButtonPlayAnimation:鼠標(biāo)單擊按鈕后,將播放目標(biāo)動(dòng)畫。(10)UIButtonMessage:傳遞消息,編寫一個(gè)公共函數(shù)來(lái)告訴系統(tǒng)要傳遞的消息內(nèi)容,在目標(biāo)對(duì)象上設(shè)置腳本,然后編寫傳遞消息的函數(shù)名稱。3)Sprites精靈Sprites精靈可以在一張圖(整體圖像集合)中截取一部分作為一個(gè)精靈,然后使用精靈來(lái)描述按鈕的四種狀態(tài)。按鈕的四種狀態(tài)如下:(1)Normal(*):默認(rèn)原始狀態(tài)。(2)Hover:經(jīng)過(guò)停留狀態(tài)。(3)Pressed(*):按下?tīng)顟B(tài)。(4)Disabled:不可用狀態(tài)。5.CheckBox對(duì)多選框CheckBox進(jìn)行不同的勾選,會(huì)有不同的效果。(1)UICheckBox:用于多選框的選擇與取消。(2)UICheckBoxControlledObject:如果取消選中此復(fù)選框,則將禁用目標(biāo)對(duì)象和所有子對(duì)象。(3)UICheckBoxControlledComponent:當(dāng)將此腳本添加到CheckBox并選擇了多選按鈕時(shí),將顯示此腳本的目標(biāo)。如果未選擇多選按鈕,則此腳本的目標(biāo)將被隱藏。6.DragDrag主要用于實(shí)現(xiàn)拖拽功能。(1)UIDragCamera:將此組件添加到對(duì)象,然后將UIDraggableCamera組件添加到Camera中,表示該Camera允許被拖拽。(2)UIDragPanelContents:表示該面的所有組件允許被拖拽的。7.其他(1)UIForwardEvents:表示從對(duì)象到另一個(gè)轉(zhuǎn)發(fā)事件。(2)UISoundVolume:用于Slider控件中。(3)UICenterOnChild:通常在拖動(dòng)事件中使用,首先將UIDraggablePanel腳本添加到面板,然后將UIDragObject或UIDragPanelContents添加到要拖動(dòng)的對(duì)象,最后將UICenterOnChild添加到網(wǎng)格根目錄。無(wú)論怎樣拖動(dòng)容器中的對(duì)象,網(wǎng)格始終保持水平或垂直居中。(4)UIInputValidator:在輸入字段中使用。在將此腳本添加到輸入字段后,Logic中會(huì)有多個(gè)選項(xiàng)。None表示將不執(zhí)行任何驗(yàn)證,用戶可以輸入任何字符(中文除外)。Integer表示用戶只能輸入整數(shù)、英語(yǔ)和各種特殊字符。Double表示只能輸入浮點(diǎn)數(shù)。Alphanumeric表示用戶可以輸入英文、數(shù)字和特殊字符。Username表示可以輸入英文、數(shù)字和一些特殊字符(小數(shù)點(diǎn)除外)。Name表示只能輸入英文、特殊字符和其他字符(小數(shù)點(diǎn)除外)。(5)UIPanelAlpha:可以用于任何控件,將此腳本添加到對(duì)象,可以在Alpha中調(diào)整參數(shù),0表示完全透明,0~1表示越來(lái)越不透明,大于1的數(shù)字表示完全不透明。(6)UIPopupList:通過(guò)NGUI創(chuàng)建PopupList控件時(shí),該控件用于下拉列表框(PopupList)。將添加此腳本,并且可以在“選項(xiàng)”下添加下拉列表框的子級(jí)。(7)UIScrollBar:用于滾動(dòng)條,Value代表當(dāng)前滾動(dòng)條的位置,Size代表滾動(dòng)條的標(biāo)準(zhǔn)尺寸,Alpha代表滾動(dòng)條的透明度,Direction可以選擇滾動(dòng)條是垂直還是水平。(8)UISlider:用于滑動(dòng)框,Value表示填充的滑動(dòng)框的比例,Direction表示用戶可以選擇滑動(dòng)框是垂直還是水平。8.TweenTween組件可以實(shí)現(xiàn)對(duì)象的透明度、顏色、位置、旋轉(zhuǎn)、大小和縮放的變化。Tween組件如圖4.4所示。1)組件功能(1)SpringPosition:表示轉(zhuǎn)換后的對(duì)象的位置,Target是目標(biāo)位置,對(duì)象將從起始位置移動(dòng)到目標(biāo)位置。(2)TweenAlpha:表示物體的透明度從某一個(gè)值到另一個(gè)值,F(xiàn)rom表示開(kāi)始的值,To表示之后的值。(3)TweenColor:表示物體的顏色從某一個(gè)值到另一個(gè)值,F(xiàn)rom表示開(kāi)始的顏色,To表示之后的顏色。(4)TweenPosition:表示物體的坐標(biāo)從一個(gè)位置到另一個(gè)位置,F(xiàn)rom表示開(kāi)始的位置,To表示之后的位置。(5)TweenRotation:表示物體從一個(gè)角度到另一個(gè)角度的變換,F(xiàn)rom表示開(kāi)始的角度,To表示之后的角度。(6)TweenScale:表示對(duì)象大小從某個(gè)值到另一個(gè)值的轉(zhuǎn)換,F(xiàn)rom表示開(kāi)始的大小,To表示之后的大小。(7)TweenTransform:表示物體的Transform變換,F(xiàn)rom表示開(kāi)始的對(duì)象位置,To表示之后的對(duì)象位置。2)具體使用添加一個(gè)Alpha組件到UI上,這個(gè)緩動(dòng)效果會(huì)直接作用到UI上。Alpha組件提供的屬性(所有的緩動(dòng)組件屬性都大致相同)如圖4.5所示。TweenAlpha組件的屬性作用如下:(1)From:緩動(dòng)開(kāi)始的值。(2)To:緩動(dòng)結(jié)束的值。(3)Play

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論