




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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簡介在Unity4.6之前的版本中,引擎自帶的UI系統(tǒng)功能不完善,市面上大多數(shù)項(xiàng)目進(jìn)行UI界面開發(fā)的時(shí)候,使用的都是第三方插件NGUI。NGUI是一組用C#語言編寫的,并專門為Unity引擎所使用的插件。NGUI的第一個(gè)版本于2011年12月面世,經(jīng)過10年的發(fā)展和沉淀,現(xiàn)如今它已經(jīng)成為世界上使用最廣泛且最成熟的UnityUI插件,完美地彌補(bǔ)了Unity引擎本機(jī)GUI系統(tǒng)的各種缺點(diǎn)??梢哉fNGUI是Unity平臺(tái)最強(qiáng)大的第三方UI系統(tǒng)。4.1.2下載與安裝1.下載(1)必須先在Unity商店中購買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所示。各基本控件說明如下:(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è)場景,只需輸入要加載到LevelName中的場景名稱。(4)Spin:旋轉(zhuǎn)。(5)SpinWithMouse:跟著鼠標(biāo)旋轉(zhuǎn)。(6)TypeWriterEffect:作用于標(biāo)簽,打字風(fēng)格。(7)ChatInput:將輸入框中的內(nèi)容提交到文本框。2.UILabel面板控制1)字體文件(1)字體圖集:將用過的單詞處理成圖片使用,更適合英語國家。(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)文本大小超過Widget中Size屬性的大小。具體包括:ShrinkContent:收縮內(nèi)容(再大也無效)。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:簡單模式,默認(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ǔ)說明。在UI生成過程中,UILabel用于顯示文本,UISprite用于顯示圖像。
無論用戶界面多么復(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ì)象,并且需要從一開始就啟用目標(biāo)對(duì)象的變換,否則當(dāng)用戶開始運(yùn)行時(shí)它將顯示在游戲轉(zhuǎn)換中。(9)UIButtonPlayAnimation:鼠標(biāo)單擊按鈕后,將播放目標(biāo)動(dòng)畫。(10)UIButtonMessage:傳遞消息,編寫一個(gè)公共函數(shù)來告訴系統(tǒng)要傳遞的消息內(nèi)容,在目標(biāo)對(duì)象上設(shè)置腳本,然后編寫傳遞消息的函數(shù)名稱。3)Sprites精靈Sprites精靈可以在一張圖(整體圖像集合)中截取一部分作為一個(gè)精靈,然后使用精靈來描述按鈕的四種狀態(tài)。按鈕的四種狀態(tài)如下:(1)Normal(*):默認(rèn)原始狀態(tài)。(2)Hover:經(jīng)過停留狀態(tài)。(3)Pressed(*):按下狀態(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)格根目錄。無論怎樣拖動(dòng)容器中的對(duì)象,網(wǎng)格始終保持水平或垂直居中。(4)UIInputValidator:在輸入字段中使用。在將此腳本添加到輸入字段后,Logic中會(huì)有多個(gè)選項(xiàng)。None表示將不執(zhí)行任何驗(yàn)證,用戶可以輸入任何字符(中文除外)。Integer表示用戶只能輸入整數(shù)、英語和各種特殊字符。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表示越來越不透明,大于1的數(shù)字表示完全不透明。(6)UIPopupList:通過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表示開始的值,To表示之后的值。(3)TweenColor:表示物體的顏色從某一個(gè)值到另一個(gè)值,F(xiàn)rom表示開始的顏色,To表示之后的顏色。(4)TweenPosition:表示物體的坐標(biāo)從一個(gè)位置到另一個(gè)位置,F(xiàn)rom表示開始的位置,To表示之后的位置。(5)TweenRotation:表示物體從一個(gè)角度到另一個(gè)角度的變換,F(xiàn)rom表示開始的角度,To表示之后的角度。(6)TweenScale:表示對(duì)象大小從某個(gè)值到另一個(gè)值的轉(zhuǎn)換,F(xiàn)rom表示開始的大小,To表示之后的大小。(7)TweenTransform:表示物體的Transform變換,F(xiàn)rom表示開始的對(duì)象位置,To表示之后的對(duì)象位置。2)具體使用添加一個(gè)Alpha組件到UI上,這個(gè)緩動(dòng)效果會(huì)直接作用到UI上。Alpha組件提供的屬性(所有的緩動(dòng)組件屬性都大致相同)如圖4.5所示。TweenAlpha組件的屬性作用如下:(1)From:緩動(dòng)開始的值。(2)To:緩動(dòng)結(jié)束的值。(3)PlayStyle:播放的風(fēng)格,共有3種風(fēng)格,其中Once表示播放一次,Loop表示循環(huán)播放,PingPong表示循環(huán)往復(fù)播放。(4)AnimationCurve:Unity3D自帶的動(dòng)畫曲線編輯器,可以在這里編輯緩動(dòng)的曲線效果,可以實(shí)現(xiàn)線性動(dòng)畫或越來越快的動(dòng)畫效果等。(5)Duration:播放一次動(dòng)畫所需的時(shí)間。(6)StartDelay:開始播放動(dòng)畫前等待的時(shí)間。(7)TweenGroup:動(dòng)畫所屬的組,在下文的UIPlayTween組件中使用。(8)IgnoreTimeScale:Unity3D的TimeScale值修改時(shí)是否會(huì)影響到該緩動(dòng)動(dòng)畫。(9)OnFinished:動(dòng)畫播放結(jié)束時(shí)調(diào)用指定對(duì)象的指定方法,注意拖拽到該區(qū)域的GameObject必須帶有腳本組件,同時(shí)Loop和PingPong永遠(yuǎn)不會(huì)執(zhí)行到該方法。3)動(dòng)畫控制單獨(dú)在組件上使用緩動(dòng)動(dòng)畫腳本意義不大,還需要對(duì)緩動(dòng)動(dòng)畫進(jìn)行控制才能制作出理想的效果。UIPlayTween是NGUI提供的一個(gè)腳本組件,可以用來控制多個(gè)動(dòng)畫的播放,其參數(shù)如圖4.6所示。UIPlayTween的屬性作用如下:(1)TweenTarget:控制的目標(biāo)對(duì)象,為空表示控制自身添加的緩動(dòng)對(duì)象,也可以指定特定的對(duì)象表示控制該對(duì)象上的緩動(dòng)動(dòng)畫。(2)IncludeChildren:是否控制目標(biāo)對(duì)象上子物體的緩動(dòng)組件。(3)TweenGroup:具體控制的緩動(dòng)組件的組號(hào),只會(huì)控制設(shè)定組號(hào)為該數(shù)字的緩動(dòng)組件。(4)Triggercondition:觸發(fā)機(jī)制,可以選擇觸發(fā)緩動(dòng)動(dòng)畫的事件機(jī)制,比如點(diǎn)擊當(dāng)前對(duì)象或者別的事件,注意和TweenTarget無關(guān),僅針對(duì)當(dāng)前對(duì)象。(5)Playdirection:播放方向?yàn)镕orward從From到To播放,Toggle從From到To后從To到From如此反復(fù),Reverse從To到From。(6)IfTargetisdisabled:目標(biāo)物體被禁用時(shí)的處理。DoNothing指不做任何處理,EnableThenPlay指激活目標(biāo)物體播放動(dòng)畫。(7)Ifalreadyplaying:目標(biāo)動(dòng)畫已經(jīng)在播放時(shí)的處理。Continue指繼續(xù)播放,Restart指重新播放,RestartIfNotPlaying指等待播放完畢再播放一次。(8)Whenfinished:播放完畢后對(duì)目標(biāo)物體的處理。DoNotDisable指不做任何處理、DisableAfterForward指正向播放完畢后禁用物體、DisableAfterReverse指反向播放完畢后禁用物體。(9)OnFinished:播放完所有動(dòng)畫后的回調(diào)方法。使用該組件時(shí)一般會(huì)將掛載在目標(biāo)對(duì)象上的緩動(dòng)腳本禁用,否則動(dòng)畫會(huì)一開始就播放,這就失去了控制的意義。另外,該組件控制的是一個(gè)物體或包括該物體子物體的緩動(dòng),如果是簡單的緩動(dòng)可以直接使用NGUI提供的組件,如果是較為復(fù)雜的緩動(dòng)推薦使用專業(yè)的第三方緩動(dòng)類庫,如DOTween等。9.CreateaWidgetCreateaWidget用于創(chuàng)建控件的功能,可以創(chuàng)建以下控件:(1)創(chuàng)建標(biāo)簽:Label。(2)創(chuàng)建下拉列表框:PopupList。(3)創(chuàng)建進(jìn)度條:ProgressBar。(4)創(chuàng)建滑動(dòng)條:Slider。(5)創(chuàng)建輸入框:Input。(6)創(chuàng)建滾動(dòng)條:ScrollBar。(7)創(chuàng)建按鈕:Button。(8)創(chuàng)建多選框:CheckBox。10.UIScrollView滾動(dòng)視口組件,當(dāng)需要滾動(dòng)指定區(qū)域中的一個(gè)或多個(gè)對(duì)象時(shí)可以使用它。可以將ScrollView添加到任何UI。添加良好的ScrollView之后,發(fā)現(xiàn)它已綁定到兩個(gè)腳本,如圖4.7所示。UIPanel組件主要用于將內(nèi)容裁剪到視口之外,其主要參數(shù)的含義如下:(1)Clipping:剪輯類型。(2)None:無需編輯,移出可見區(qū)域的圖像仍然可見。(3)TextureMask:可以選擇一張貼圖作為遮罩。(4)SoftClip:軟編輯,默認(rèn)情況下處于此模式。(5)Constrainbutdon’tClip:約束不能從視口中拖出,不能編輯。如果選擇了SoftClip,則會(huì)出現(xiàn)以下可選項(xiàng):(1)Offset:視口偏移量。(2)Center:和Offset效果一致。(3)Size:視口尺寸。(4)Softness:剪輯邊緣柔和度。UIScrollView組件如圖4.8所示。該組件用于控制視口滾動(dòng)功能。其核心屬性作用如下:(1)ContentOrigin:滾動(dòng)起點(diǎn)。默認(rèn)為左上角。(2)Movement:滾動(dòng)方向。Horizontal為水平方向、Vertical為垂直方向、Unrestrained為自由拖動(dòng)、Custom為自定義方向。(3)DragEffect:拖動(dòng)效果。None為無效果,Momentum為帶慣性的拖動(dòng)、MomentumAndSpring為慣性和彈性阻力(超過極限值后,它將自動(dòng)跳回到正常位置)。(4)ScorllWheelFactor:車輪系數(shù)。該值越大,滾動(dòng)速度越快。(5)MomentumAmount:慣性系數(shù)。該值越大,滾動(dòng)時(shí)的慣性越大。(6)RestrictWithinPanel:拖動(dòng)是否僅限于視口,默認(rèn)情況下可以選擇。(7)CancelDragIfFits:當(dāng)對(duì)象恰好適合視口時(shí),會(huì)退出拖動(dòng)。(8)SmoothDragStart:選中后,拖動(dòng)將開始具有緩沖感;如果未選中,則拖動(dòng)將以鼠標(biāo)移動(dòng)的速度進(jìn)行。(9)IOSDragEmulation:模擬IOS的拖拽效果,可以增強(qiáng)拖拽體驗(yàn)。(10)ScrollBars:滾動(dòng)條屬性允許自己設(shè)置滾動(dòng)條,留空則表示不使用滾動(dòng)條。(11)在ScrollBars的ShowCondition屬性中,Always指總是顯示滾動(dòng)條;OnlyIfNeed指當(dāng)需要顯示時(shí)出現(xiàn);WhenDragging指拖拽時(shí)出現(xiàn)。11.UIGrid通常不直接添加UIGrid對(duì)象(因?yàn)閁IGrid對(duì)象需要依靠父對(duì)象來確定其大小,所以不能單獨(dú)設(shè)置大小),可以先創(chuàng)建一個(gè)InvisibleWidget,然后創(chuàng)建一個(gè)UIGrid組件在創(chuàng)建的對(duì)象下,最后用戶需要將已排序的組件拖到UIGrid上。當(dāng)需要在編輯界面中排列子對(duì)象時(shí),可以單擊設(shè)置菜單,如圖4.9所示。UIGrid的屬性作用如下:(1)Arrangement:網(wǎng)格排列方向。Horizontal指水平排列、Vertical指垂直排列、CellSnap指按子項(xiàng)當(dāng)前的位置對(duì)齊子項(xiàng)。(2)CellWidth:子項(xiàng)格子寬度。(3)CellHeight:子項(xiàng)格子高度。(4)ColumnLimit:子項(xiàng)最大數(shù)量。(5)Sorting:排序方式。None按照Index排序,Alphabetic按照名稱排序,Horizontal和Vertical按照localPosition進(jìn)行排序,Custom按照自定義排序。(6)Pivot:網(wǎng)格起始點(diǎn)錨點(diǎn)。12.UITableUIGrid是用于水平或垂直地對(duì)子級(jí)進(jìn)行排序,而UITable是用于在換行符中對(duì)子級(jí)進(jìn)行排序。UITable的屬性如圖4.11所示。UITable屬性作用如下:(1)Columns:列數(shù),超過該數(shù)目會(huì)添加一行。(2)Direction:行添加方向,Down向下添加、Up向上添加。(3)Sorting:排序方式。None按照Index排序、Alphabetic按照名稱排序、Horizontal和Vertical按照localPosition進(jìn)行排序、Custom按照自定義排序。(4)Pivot:網(wǎng)格起始點(diǎn)錨點(diǎn)。(5)CellAlignment:格子對(duì)齊點(diǎn)。(6)Padding:間隔。4.1.5事件監(jiān)聽NGUI事件函數(shù)可以用NGUI控制腳本或帶有沖突對(duì)象的腳本(由具有UICamera組件的相機(jī)渲染)編寫。(1)voidOnHover(boolisOver):當(dāng)鼠標(biāo)懸?;蛞瞥鰰r(shí)觸發(fā)。懸停時(shí)返回true,移出時(shí)返回false。(2)voidOnPress(boolisDown):在按下或釋放鼠標(biāo)或觸摸時(shí)觸發(fā),按下時(shí)觸發(fā),觸發(fā)時(shí)釋放。(3)voidOnClick():當(dāng)鼠標(biāo)或觸摸單擊(按下并釋放)時(shí)觸發(fā)。(4)voidOnDoubleClick():雙擊時(shí)觸發(fā)(雙擊間隔小于0.25?s)。(5)voidOnSelect(boolselected):與單擊類似,不同之處在于,如果此期間選擇了其他控件,在一次選擇之后將不再觸發(fā)OnSelect事件。(6)voidOnDrag(Vector2delta):當(dāng)按下或移動(dòng)鼠標(biāo)或觸摸時(shí)觸發(fā),增量是輸入位移。(7)voidOnInput(stringtext):僅用于輸入控件,在每次輸入后觸發(fā),這次將在輸入的信息中傳遞文本,而不是輸入控件中的文本信息。(8)voidOnTooltip(boolshow):當(dāng)鼠標(biāo)懸停一段時(shí)間或移開時(shí)觸發(fā),懸停時(shí)返回true,移開時(shí)返回false。(9)voidOnScroll(floatdelta):滾動(dòng)鼠標(biāo)中鍵時(shí)觸發(fā),增量是傳入的滾動(dòng)增量。4.2動(dòng)畫系統(tǒng)4.2.1Legacy動(dòng)畫系統(tǒng)Unity3D的Mecanim動(dòng)畫系統(tǒng)非常強(qiáng)大,作為Unity推薦的動(dòng)畫系統(tǒng),目前它和Legacy動(dòng)畫系統(tǒng)共同存在,但將來它會(huì)完全取代Legacy動(dòng)畫系統(tǒng)?,F(xiàn)在先使用Unity的資源來學(xué)習(xí)舊版Legacy動(dòng)畫系統(tǒng),創(chuàng)建一個(gè)Unity3D項(xiàng)目,在菜單欄中依次選擇Assets→ImportPackage→CharacterController,并將人物導(dǎo)入資源中以便使用Legacy動(dòng)畫系統(tǒng)。1.模型文件對(duì)于骨骼這一項(xiàng),發(fā)現(xiàn)動(dòng)畫類型設(shè)置為“Legacy”,表明此模型使用的動(dòng)畫類型是動(dòng)畫系統(tǒng)的舊版本,如圖4.12所示。再看看動(dòng)畫頁,如圖4.13所示。在動(dòng)畫頁面中,可以編輯動(dòng)畫剪輯。2.控制動(dòng)畫直接將FBX文件拖到場景中,Unity將自動(dòng)為其添加兩個(gè)組件,即Transform和Animation(注意,Mecanim動(dòng)畫系統(tǒng)使用Animator組件,而Legacy動(dòng)畫系統(tǒng)使用Animation組件)。Animation組件如圖4.14所示。Animation組件的設(shè)置還是比較簡單的,其屬性作用如下:(1)Animation:當(dāng)前播放的動(dòng)畫。(2)Animations:所有可以播放的動(dòng)畫。(3)PlayAutomatically:是否自動(dòng)播放。(4)AnimatePhysics:動(dòng)畫是否與現(xiàn)實(shí)世界互動(dòng)。(5)CullingType:動(dòng)畫不可見時(shí)是否繼續(xù)播放,默認(rèn)情況下選擇OK選項(xiàng)都可以。單擊播放按鈕,用戶可以看到動(dòng)畫正常播放。4.2.2Legacy動(dòng)畫控制1.腳本控制如何使用腳本來控制動(dòng)畫的播放??梢詫⒁韵履_本綁定到角色,示例代碼如下:運(yùn)行該程序,將看到兩行按鈕,第一行按鈕使用Play方法切換動(dòng)畫,第二行按鈕使用CrossFade播放動(dòng)畫。2.Play與CrossFade的區(qū)別以從跑步切換到站立動(dòng)畫為例。Play可以直接切換動(dòng)畫。如果角色先前處于傾斜的跑步狀態(tài),那么它將立即變?yōu)檎玖顟B(tài),這在性能上不是很真實(shí),特別是在兩個(gè)動(dòng)畫姿勢完全不同時(shí)更不真實(shí)。CrossFade通過動(dòng)畫融合切換動(dòng)畫。第二參數(shù)可以指示融合的時(shí)間。如果角色先前處于傾斜的行走狀態(tài),則它將在指定的融合時(shí)間內(nèi)逐漸變?yōu)檎玖顟B(tài),這更接近角色動(dòng)作的實(shí)際切換效果。3.PlayQueued該方法可以指定當(dāng)前動(dòng)畫完成后要播放的動(dòng)畫。4.文件格式和資源加載一般的模型使用通用的FBX格式,因此通常在兩種情況下保存動(dòng)畫文件。一種是將所有動(dòng)畫和模型保存在一個(gè)文件中,另一種是將模型保存在一個(gè)文件中,而動(dòng)畫保存在一個(gè)文件中。5.模型動(dòng)畫都存放在一個(gè)文件中的情況
該結(jié)構(gòu)類似于Unity提供的CharacterController中的資源。FBX文件用于保存模型,骨骼和動(dòng)畫,如圖4.15所示。6.模型動(dòng)畫分開存放的情況
模型和動(dòng)畫存儲(chǔ)在多個(gè)FBX文件中,如圖4.16所示。
上圖中雖然有一個(gè)Take001的動(dòng)畫,但是實(shí)際上并不使用該動(dòng)畫,而是使用下面僅保存了動(dòng)畫的FBX文件,如圖4.17所示。4.2.3Mecanim動(dòng)畫系統(tǒng)1.認(rèn)識(shí)Mecanim動(dòng)畫系統(tǒng)Mecanim動(dòng)畫系統(tǒng)是Unity3D4.0推出的全新動(dòng)畫系統(tǒng),主要提供以下4種功能:(1)針對(duì)人形角色提供一套特殊的工作流。(2)動(dòng)畫重定向功能使將動(dòng)畫從一個(gè)角色模型應(yīng)用于其他角色模型非常方便。(3)提供可視化的動(dòng)畫編輯器,可以輕松創(chuàng)建和預(yù)覽動(dòng)畫剪輯。(4)提供可視化的Animator編輯器,可以輕松管理多個(gè)動(dòng)畫切換狀態(tài)。2.工作流1)模型的準(zhǔn)備Unity無法制作3D模型并綁定骨骼,這些需要由專業(yè)建模人員完成。常用的建模軟件有3DMax、Maya、Cinema4D、Blender、Mixamo。在模型建立好之后,只需要將這些資源導(dǎo)入U(xiǎn)nity3D中即可使用。2)角色設(shè)置
導(dǎo)入U(xiǎn)nity3D中的資源需要進(jìn)行一些簡單設(shè)置,主要分為人形角色的設(shè)置和通用角色的設(shè)置兩種。3)讓角色運(yùn)動(dòng)
通過Unity3DMecanim提供的各種工具可以配置動(dòng)畫,以便可以正常播放。常用的Mecanim模塊有動(dòng)畫剪輯、動(dòng)畫狀態(tài)機(jī)、混合樹、動(dòng)畫參數(shù)。3.示例
學(xué)習(xí)動(dòng)畫系統(tǒng)需要特定的動(dòng)畫文件和資源。在這里,使用課題項(xiàng)目虛擬課堂中使用的資源包。依次選擇菜單欄中的Assets→ImportPackage→Character,導(dǎo)入資源中的人物使用Mecanim動(dòng)畫系統(tǒng)模型。4.2.4模型導(dǎo)入要在Unity3D中使用模型和動(dòng)畫,則需要一定的開發(fā)過程來實(shí)現(xiàn)。以下是基于人形模型的開發(fā)過程。1.模型制作(1)模型建模(Modelling):通常會(huì)在建模時(shí)制作一個(gè)稱為T型姿勢(雙臂張開)的模型。(2)骨骼綁定(Rigging):為了將骨骼綁定到先前制作的模型上,必須確保骨骼數(shù)量不能少于15,并且同時(shí)遵循Unity3D標(biāo)準(zhǔn)進(jìn)行骨骼生成。(3)蒙皮(Skinning):繪制權(quán)重的過程是設(shè)置受骨骼影響的模型的每個(gè)三角形的權(quán)重,以使骨骼可以影響模型并產(chǎn)生動(dòng)畫。2.模型導(dǎo)入U(xiǎn)nity3D支持以下模型格式的文件導(dǎo)入:FBX、OBJ、MAX、MB、BLEND。
由于諸如MAX類型的文件是相應(yīng)建模軟件的源文件,因此Unity3D需要安裝3DMax來支持該文件,而其他文件相同,因此更好的文件格式是FBX,這是一種通用的3D文件格式,盡管OBJ也是一種通用的3D文件格式,但是它不支持動(dòng)畫等功能,通常僅用于靜態(tài)對(duì)象。3.FBXSDK
這里提供FBX的SDK下載地址為/products/fbx/overview。4.導(dǎo)入到Unity3D中
導(dǎo)入非常簡單,只需要在Project面板中右擊選擇“ImportNewAsset...”,然后在彈出的菜單中選擇FBX文件即可。5.模型配置
在Project面板中選擇導(dǎo)入的模型后,將在Inspector面板中看到模型的配置信息。下面給出相關(guān)選項(xiàng)卡官方網(wǎng)站的說明鏈接:(1)Model:/Manual/FBXImporter-Model.html。
當(dāng)模型需要使用光照貼圖烘焙系統(tǒng)時(shí),需要選中“GenerateLightmap”UVs選項(xiàng)以打開第二組UV。(2)Rig:/Manual/FBXImporter-Rig.html。
這里需要說的是骨頭的類型,None表示沒有骨骼,Legacy表示為舊版動(dòng)畫系統(tǒng)的骨架,Generic表示為通用的骨骼,Humanoid表示為人形骨骼。
如果選擇了Humanoid類型,則可以單擊“Configura...”按鈕來修改人體骨骼和肌肉的配置。4.2.5AnimationView(動(dòng)畫視圖)1.動(dòng)畫組件之間的關(guān)系動(dòng)畫組件之間的關(guān)系如圖4.18所示。
在這里可以看到綁定到GameObject的Animator組件控制了動(dòng)畫播放的模型。
屬性Controller對(duì)應(yīng)于一個(gè)AnimatorController文件,該文件可以在Animator窗口中打開。它是一個(gè)設(shè)計(jì)為狀態(tài)機(jī)的系統(tǒng),可以在此接口上設(shè)置多個(gè)狀態(tài)之間的切換關(guān)系。AnimatorController中的每個(gè)狀態(tài)則對(duì)應(yīng)一個(gè)AnimationClip,每個(gè)AnimationClip是一個(gè)簡單的動(dòng)畫單元,可以在Animation窗口中打開。2.動(dòng)畫文件1)AnimationClip文件
如果FBX包含動(dòng)畫文件,則可以在其中創(chuàng)建多個(gè)動(dòng)畫剪輯,并且每個(gè)AnimationClip都包含一個(gè)簡單的動(dòng)畫,如Idle、Run等。2)Animation文件
舊版的動(dòng)畫格式文件,使用XML數(shù)據(jù)記錄動(dòng)畫信息。3)ApplyRootMotion選項(xiàng)Animator組件中有一個(gè)名為ApplyRootMotion的可選項(xiàng)。如果未選擇此選項(xiàng),動(dòng)畫將根據(jù)世界坐標(biāo)移動(dòng),即Animation值將直接設(shè)置為目標(biāo)位置。選中此選項(xiàng)后,動(dòng)畫設(shè)置將添加到目標(biāo)位置。3.事件系統(tǒng)
對(duì)于一個(gè)動(dòng)畫,還可以為其任意幀添加一個(gè)事件。首先,為MainCamera添加一個(gè)接收Event事件的組件,示例代碼如下:
接下來,向Animation窗口中的任意幀添加一個(gè)事件,如圖4.19所示,并調(diào)用ShowAnimMsg方法以便同時(shí)傳遞字符串,運(yùn)行游戲后就會(huì)看到輸出結(jié)果。4.2.6AnimationState(動(dòng)畫狀態(tài))1.動(dòng)畫的設(shè)置AnimationClip窗口如圖4.20所示。AnimationClip的屬性作用如下:(1)Looptime:動(dòng)畫是否循環(huán)播放。(2)RootTransformRotation:表示為有關(guān)播放動(dòng)畫的對(duì)象旋轉(zhuǎn)的信息。(3)RootTransformPosition(Y):表示為播放動(dòng)畫的對(duì)象的位置,Y軸信息。(4)RootTransformPosition(XZ):表示為播放動(dòng)畫XZ平面信息的對(duì)象的位置。上述3個(gè)屬性都有一致的選項(xiàng),這些選項(xiàng)是:·BakeIntoPose:未選中表示動(dòng)畫所產(chǎn)生的旋轉(zhuǎn)或位移將應(yīng)用于動(dòng)畫的主要對(duì)象,這意味著它不會(huì)應(yīng)用于動(dòng)畫的主要對(duì)象?!asedUpon:基準(zhǔn)點(diǎn),該選項(xiàng)有3種類型,其中,Original表示參考點(diǎn)使用動(dòng)畫文件中的預(yù)設(shè)值;CenterofMass表示參考點(diǎn)使用重心,這意味著角色的下半身將嵌入地面;Feet表示基準(zhǔn)點(diǎn)使用第一幀的腳。2.動(dòng)畫狀態(tài)動(dòng)畫狀態(tài)如圖4.21所示,點(diǎn)擊項(xiàng)目中任意一個(gè)AnimatorController,打開Animator界面可以看到該狀態(tài)界面。該圖展示的顯示面板是標(biāo)準(zhǔn)的有限狀態(tài)機(jī)配置面板。系統(tǒng)生成3個(gè)狀態(tài)“Entry”“AnyState”和“Exit”,其他狀態(tài)由自己創(chuàng)建和管理。每個(gè)狀態(tài)都由帶有箭頭的線段連接,表示該狀態(tài)可以轉(zhuǎn)換為指向狀態(tài)。3.狀態(tài)面板
狀態(tài)關(guān)系切換以后再點(diǎn)擊任意一個(gè)狀態(tài),在Inspector面板可以看到該狀態(tài)的詳細(xì)信息,如圖4.22所示。
狀態(tài)窗口的屬性作用如下:(1)Motion:表示當(dāng)前狀態(tài)對(duì)應(yīng)的AnimationClip。(2)Speed:表示當(dāng)前狀態(tài)速度,1代表正常速度,后面的參數(shù)刻度表示使用參數(shù)代表當(dāng)前速度,輸入框?qū)⒊蔀橄吕x擇框??梢赃x擇指定的參數(shù),可以在Parameters面板中進(jìn)行配置,其功能是通過代碼輕松修改參數(shù)值,以達(dá)到調(diào)速的目的。(3)Mirror:表示是否沿Y軸翻轉(zhuǎn)動(dòng)畫,通常用于重用動(dòng)畫。如果選中此項(xiàng)目,則召喚右手的動(dòng)畫將變?yōu)檎賳咀笫帧?4)CycleOffset:表示播放偏移量。(5)FootIK:當(dāng)需要將腳靠近地面時(shí),可以打開通常關(guān)閉的腳的IK動(dòng)畫(反向動(dòng)力學(xué))。(6)WriteDefaults:播放動(dòng)畫后是否將狀態(tài)重置為默認(rèn)狀態(tài),通常進(jìn)行檢查。
下面的Transitions面板將列出可以轉(zhuǎn)換為其他狀態(tài)的當(dāng)前狀態(tài)。選中Solo表示當(dāng)前過渡是唯一的過渡,即當(dāng)前狀態(tài)只能過渡到此項(xiàng)目指向的狀態(tài)。選中Mute表示關(guān)閉此動(dòng)畫過渡,即當(dāng)前狀態(tài)無法過渡到此項(xiàng)目指向的狀態(tài)。4.3Animator(動(dòng)畫)4.3.1AnimatorController(動(dòng)畫控制器)1.簡介AnimatorController是一種文件類型,在Unity中作為單獨(dú)的配置文件存在,并具有后綴Controller。AnimatorController包括以下功能:(1)可以對(duì)多個(gè)動(dòng)畫進(jìn)行整合。(2)使用狀態(tài)機(jī)來實(shí)現(xiàn)動(dòng)畫的播放和切換。(3)可以實(shí)現(xiàn)動(dòng)畫融合和分層播放。(4)動(dòng)畫回放的深入控制可以通過腳本來完成。
圖4.23所示為動(dòng)畫的組成結(jié)構(gòu)。Animator組件用于控制角色動(dòng)畫的播放。所需的兩個(gè)核心內(nèi)容是動(dòng)畫控制器AnimatorController,用于控制動(dòng)畫的播放邏輯,以及動(dòng)畫骨架Avatar對(duì)象,用于控制角色動(dòng)畫的播放。2.Animator組件
播放動(dòng)畫的角色都需要添加Animator組件,該組件即為控制動(dòng)畫的接口,Animator組件如圖4.24所示。Animator組件的屬性作用如下:(1)Controller:使用的AnimatorController文件。(2)Avatar:使用的骨骼文件。(3)ApplyRootMotion:綁定到該游戲?qū)ο蟮腉ameObject的位置是否可以通過動(dòng)畫來更改。(4)UpdateMode:更新模式。Normal表示使用Update進(jìn)行更新,AnimatePhysics表示使用FixUpdate進(jìn)行更新,UnscaleTime表示無視timeScale進(jìn)行更新)。(5)CullingMode:剔除模式。AlwaysAnimate意味著即使看不見相機(jī)也將更新動(dòng)畫,CullUpdateTransform表示如果看不見相機(jī),動(dòng)畫將暫停,但位置將繼續(xù)更新,CullCompletely表示對(duì)照相機(jī)的所有更新,相機(jī)不可見時(shí)動(dòng)畫將停止。下方還會(huì)顯示動(dòng)畫的一些主要信息。3.AnimatorOverrideController
右鍵創(chuàng)建資源時(shí)會(huì)發(fā)現(xiàn)這樣的一個(gè)資源——AnimatorOverrideController,該資源的意思是根據(jù)AnimatorController修改每個(gè)狀態(tài)的動(dòng)畫,其他設(shè)置保持不變,這可以輕松地重用創(chuàng)建的AnimatorController。4.創(chuàng)建一個(gè)AnimatorController
在Project視圖中右擊菜單可以創(chuàng)建AnimatorController,如圖4.25所示為新創(chuàng)建的AnimatorController。
在該界面中發(fā)現(xiàn)3個(gè)默認(rèn)狀態(tài),它們是Unity自動(dòng)創(chuàng)建的,無法刪除。(1)Entry:在調(diào)用當(dāng)前狀態(tài)機(jī)時(shí)顯示條目。在狀態(tài)機(jī)之后進(jìn)入的與該狀態(tài)關(guān)聯(lián)的第一個(gè)狀態(tài)。(2)AnyState:表示任何狀態(tài),并具有它所指向的狀態(tài)是可以隨時(shí)切換狀態(tài)的功能。(3)Exit:表示要退出當(dāng)前狀態(tài)機(jī)。如果狀態(tài)指向出口,則意味著可以從指定狀態(tài)退出當(dāng)前狀態(tài)機(jī)。5.創(chuàng)建新狀態(tài)可以通過右鍵菜單進(jìn)行創(chuàng)建,如圖4.26所示。
或者可以通過將動(dòng)畫剪輯拖放到狀態(tài)機(jī)窗口來創(chuàng)建??梢园l(fā)現(xiàn)創(chuàng)建的第一個(gè)狀態(tài)被設(shè)置為默認(rèn)的第一個(gè)狀態(tài),第一個(gè)狀態(tài)會(huì)被標(biāo)記為黃色,如圖4.27所示。可以使用上述兩種方法來創(chuàng)建多個(gè)狀態(tài),同時(shí)配置好每個(gè)狀態(tài),如圖4.28所示。6.狀態(tài)切換
狀態(tài)機(jī)已經(jīng)有了狀態(tài),但是還沒有指定每個(gè)狀態(tài)之間的關(guān)系,下面來看看該如何指定狀態(tài)之間的關(guān)系。
在Mecanim中,不再通過調(diào)用Play等方法在動(dòng)畫之間切換播放,而是通過判斷參數(shù)的轉(zhuǎn)換來切換狀態(tài)(即動(dòng)畫)。打開Parameters面板,該面板用于設(shè)置狀態(tài)機(jī)使用的各種參數(shù),如圖4.29所示。單擊“+”號(hào)創(chuàng)建參數(shù),可以在Unity中創(chuàng)建4種類型的參數(shù):(1)Float:浮點(diǎn)類型參數(shù),主要用于控制狀態(tài)機(jī)內(nèi)部的浮點(diǎn)參數(shù)。(2)Int:整型參數(shù),主要用于控制狀態(tài)機(jī)內(nèi)部的整數(shù)參數(shù)。(3)Bool:布爾型參數(shù),主要用于狀態(tài)切換。(4)Trigger:本質(zhì)上是布爾類型參數(shù),但默認(rèn)情況下其值為false,設(shè)置為true后,系統(tǒng)會(huì)自動(dòng)將其恢復(fù)為true,否則,默認(rèn)為false。下面創(chuàng)建兩個(gè)簡單的Bool類型變量,如圖4.30所示。希望當(dāng)Walk為true時(shí),角色行走,當(dāng)Walk為false時(shí),角色站立,并且Run相同,但它將過渡為運(yùn)行。
接下來,用戶可以通過右鍵單擊狀態(tài)菜單以指示當(dāng)前狀態(tài)已轉(zhuǎn)換為目標(biāo)狀態(tài),拖出狀態(tài)轉(zhuǎn)換線,如圖4.31所示??梢詥螕粼撔性贗nspector窗口中設(shè)置轉(zhuǎn)換條件,如圖4.32所示。
在條件框中將Walk設(shè)置為true,這意味著將Walk設(shè)置為true時(shí),它將從站立動(dòng)畫跳到行走動(dòng)畫。同樣,步行回到站立狀態(tài)需要轉(zhuǎn)換線,但步行應(yīng)設(shè)置為false,如圖4.33所示。Run的設(shè)置與Walk一致。7.HasExitTime發(fā)現(xiàn)該行中有一個(gè)復(fù)選框HasExitTime,如圖4.34所示。
如果選中此選項(xiàng),則在轉(zhuǎn)換動(dòng)畫時(shí),將等待當(dāng)前動(dòng)畫完成后再切換到下一個(gè)動(dòng)畫。如果當(dāng)前動(dòng)畫是循環(huán)動(dòng)畫,則在當(dāng)前播放完成后等待轉(zhuǎn)換,因此當(dāng)需要立即轉(zhuǎn)換動(dòng)畫時(shí),一定記住取消選中。另一種情況是當(dāng)前動(dòng)畫完成后,當(dāng)前的動(dòng)畫將自動(dòng)切換到箭頭指向的下一個(gè)狀態(tài)(沒有其他跳轉(zhuǎn)條件),此時(shí)必須選擇此選項(xiàng),否則動(dòng)畫結(jié)束后它將卡住。如果是循環(huán)動(dòng)畫,那么最后一個(gè)圖像將始終循環(huán)播放。8.控制動(dòng)畫轉(zhuǎn)換
向綁定到Animator組件的GameObject添加了以下新腳本組件,可以通過按下按鈕來更改角色的動(dòng)畫。示例代碼如下:4.3.2使用腳本控制動(dòng)畫1.控制人物動(dòng)畫播放下面先看看AnimatorController的配置,如圖4.35所示。
角色只能在站立狀態(tài)下進(jìn)入行走狀態(tài),步行只能進(jìn)入跑步狀態(tài)或返回站立狀態(tài),跑步只能進(jìn)入跳躍狀態(tài)或返回行走狀態(tài),而跳躍只能返回跑步狀態(tài)。兩個(gè)參數(shù)分別是Float類型的moveSpeed和Trigger類型的Jump。連接的直接轉(zhuǎn)換條件為moveSpeed大于0.1角色切換到行走狀態(tài),moveSpeed大于0.9角色切換到跑步狀態(tài),小于0.1返回站立狀態(tài),moveSpeed小于0.9返回行走狀態(tài),并且Jump觸發(fā)進(jìn)入跳躍狀態(tài)。
向角色添加一個(gè)Animator組件,并綁定上面的AnimatorController文件,并綁定相應(yīng)控制腳本。2.StateMachineBehavior
在Unity5.0版本中,可以向Animator控制器中的每個(gè)狀態(tài)添加腳本,類似于專用于GameObject的MonoBehavior,可以向State添加狀態(tài)機(jī)行為,也可以打開任何Animator控制器,并且可以通過點(diǎn)擊檢查器窗口中的腳本按鈕來添加新的腳本,如圖4.36所示。
除了State外,還可以在層上添加,層可以看作是包含了整個(gè)State的一個(gè)大State,如圖4.37所示。
通過使用StateMachineBehaviour,可以在特定的時(shí)間點(diǎn)更方便地觸發(fā)一些需要的事件,但是應(yīng)該注意,通常將一些場景對(duì)象分配給StateMachineBehaviour,而不是直接將它們拖到Inspector面板中。Animator的GetBehavior方法獲取指定的StateMachineBehavior實(shí)例,然后通過腳本進(jìn)行分配。4.3.3IK動(dòng)畫1.IKIK是反向動(dòng)力學(xué),也就是說,用戶可以使用場景中的各種對(duì)象來控制和操縱角色身體部位的運(yùn)動(dòng)。通常,骨骼動(dòng)畫是從父節(jié)點(diǎn)驅(qū)動(dòng)到子節(jié)點(diǎn)的傳統(tǒng)方法(即前向動(dòng)態(tài))。而IK是另一種方法,是骨骼子節(jié)點(diǎn)驅(qū)動(dòng)骨骼父節(jié)點(diǎn)。在特定情況下,例如當(dāng)角色在石頭上行走時(shí),足部子節(jié)點(diǎn)需要驅(qū)動(dòng)全身骨骼以響應(yīng)踩在石頭上的情況。IK可以使角色和場景適合更逼真的游戲效果。如果讀者玩過“刺客信條”系列,則主角的爬墻和飛行能力應(yīng)該會(huì)給每個(gè)人留下深刻的印象。這些是使用IK的應(yīng)用程序動(dòng)畫適合特定場景的性能。使用IK時(shí)需要注意以下兩點(diǎn):(1)角色的動(dòng)畫需要選擇Humanoid選項(xiàng),可以選中角色模型后,依次選擇Rig→AnimationType來找到Humanoid。(2)在菜單欄中依次選擇Window→Animator打開動(dòng)畫控制器窗口,同時(shí)一定勾選IKPass。Unity3D本身已經(jīng)帶有了IK的功能,這里不再詳細(xì)介紹,感興趣的讀者可以查閱官網(wǎng)。2.FinalIK該插件是Unity自身IK的優(yōu)化和增強(qiáng),可以模擬更逼真的效果。4.4動(dòng)畫層及事件應(yīng)用4.4.1AnimatorLayers(動(dòng)畫分層)1.動(dòng)畫分層的作用
如果用戶要開發(fā)第三人稱射擊游戲,可將人體動(dòng)畫分為兩部分,上半部分根據(jù)目標(biāo)位置以及是否射擊進(jìn)行動(dòng)畫處理,而下部分則將根據(jù)運(yùn)動(dòng)進(jìn)行播放。2.AvatarMask
下面將使用“AvatarMask”來實(shí)現(xiàn)角色在運(yùn)行時(shí)召喚的效果。
首先,在場景中添加一個(gè)角色,同時(shí)添加一個(gè)動(dòng)畫師控制器并設(shè)置跳轉(zhuǎn)條件,如圖4.38所示。
然后,將添加以下腳本來控制動(dòng)畫的播放方式。為防止角色由于動(dòng)畫而移動(dòng),請(qǐng)記住取消“ApplyRootMotion”,以便檢查動(dòng)畫的效果。
希望角色在按下空格時(shí)播放召喚動(dòng)畫,但不能停止跑步和跳躍動(dòng)畫。需要添加一個(gè)新的Layer來管理招手動(dòng)畫的播放,如圖4.39所示。
同時(shí),必須配置召喚動(dòng)畫。這里的“空閑”不需要添加任何動(dòng)畫,僅表示它是空的。同時(shí),添加了一個(gè)觸發(fā)器“wave”以指示進(jìn)入召喚動(dòng)畫的條件。
接下來,設(shè)置該層的權(quán)重為1,如圖4.40所示。
點(diǎn)擊播放召喚動(dòng)畫,發(fā)現(xiàn)在播放召喚動(dòng)畫時(shí)其他動(dòng)畫將停止。
需要?jiǎng)?chuàng)建一個(gè)AvatarMask文件,以指示只想播放動(dòng)畫的一部分,即手部動(dòng)畫,而其他部分則不會(huì)播放。在Project窗口中右鍵單擊以創(chuàng)建AvatarMask文件,如圖4.41所示。
將右手部分以外的區(qū)別關(guān)閉即可,如圖4.42所示。
這是一個(gè)稱為“Transform”的選項(xiàng),可控制是否在動(dòng)畫中使用每個(gè)骨骼。如果角色有翅膀和尾巴,則使用該選項(xiàng)。
最后,將此AvatarMask拖到動(dòng)畫控制器的Wave層上,如圖4.43所示。再次運(yùn)行動(dòng)畫,需要的效果就出來了。3.設(shè)置解說Layers面板的設(shè)置如圖4.44所示。Layers面板的屬性作用如下:1)WeightWeight是指動(dòng)畫層的權(quán)重,默認(rèn)基礎(chǔ)層必須為1。如果設(shè)置為0,將不播放當(dāng)前層的動(dòng)畫,將播放1,并且將使用類似的融合在0~1之間播放動(dòng)畫。例如前面的召喚示例,如果將其設(shè)置為0.5,則將播放召喚動(dòng)畫,手臂只會(huì)舉到脖子上。2)MaskMask是指動(dòng)畫遮罩,前面已經(jīng)詳細(xì)介紹,這里不再贅述。3)Blending動(dòng)畫混合方式有以下兩種:(1)Override:重寫,表示當(dāng)前層的動(dòng)畫覆蓋其他層的動(dòng)畫。(2)Additive:添加,表示將當(dāng)前層的動(dòng)畫量添加到其他層的動(dòng)畫中。4)Sync
開啟了該功能后會(huì)多出一些選項(xiàng),可以將該功能看作復(fù)制的作用,如圖4.45所示。SourceLayer:指示哪一層是當(dāng)前層的副本。該功能提供的效果就是兩個(gè)狀態(tài)一致的層可以做出一些不同的調(diào)整。設(shè)置后,當(dāng)前級(jí)別的狀態(tài)將與指定級(jí)別完全相同或完全同步。但是,用戶可以更改特定狀態(tài)的動(dòng)畫。Timing:如果當(dāng)前層和SourceLayer的動(dòng)畫時(shí)間長度在同一狀態(tài)下不一致,則將根據(jù)SourceLayer的時(shí)間播放未選中的層以及動(dòng)畫的播放速度(其效果是復(fù)制層的動(dòng)畫可能變快或變慢)。選中此選項(xiàng)后,SourceLayer將根據(jù)復(fù)制圖層的時(shí)間進(jìn)行播放,即復(fù)制SourceLayer的播放速度動(dòng)畫不會(huì)改變。5)IKPass
點(diǎn)擊勾選此選項(xiàng)框,表示啟動(dòng)IK動(dòng)畫。4.4.2BlendTree(混合樹)1.認(rèn)識(shí)BlendTree
除了在AnimatorController中創(chuàng)建State之外,還可以創(chuàng)建BlendTree,如圖4.46所示。BlendTree參數(shù),如圖4.47所示。BlendTree和State唯一的區(qū)別是Montion指向的類型變?yōu)锽lendTree類型。未選擇BlendTree時(shí)只能用一個(gè)動(dòng)畫設(shè)置,而選擇BlendTree時(shí)可以設(shè)置為多個(gè)動(dòng)畫混合。
2.一維混合樹
角色的運(yùn)行分為3個(gè)動(dòng)畫,即向前運(yùn)行,向左運(yùn)行和向右運(yùn)行,其中向左運(yùn)行和向右運(yùn)行角色將有一個(gè)一定的傾斜度,這更符合實(shí)際情況,那么在狀態(tài)機(jī)中只有一個(gè)運(yùn)行狀態(tài),因此需要將運(yùn)行狀態(tài)設(shè)置為混合樹,以混合這3個(gè)動(dòng)畫。
首先,需要?jiǎng)?chuàng)建一個(gè)新場景,拖動(dòng)到角色模型中,再創(chuàng)建一個(gè)AnimatorController并對(duì)其進(jìn)行配置,如圖4.48所示。
注意:Run是混合樹而不是State。雙擊Run進(jìn)入混合樹的編輯界面。右擊混合樹添加3個(gè)Motion,如圖4.49所示。同時(shí)需要手動(dòng)設(shè)定好3個(gè)方向的跑動(dòng)動(dòng)畫,如圖4.50所示。
還需要手動(dòng)設(shè)定一個(gè)名為Direction的Float類型的參數(shù)來控制這個(gè)混合樹,如圖4.51所示。接下來,取消“AutomateThresholds”選項(xiàng)后按照如圖4.52所示設(shè)置參數(shù),系統(tǒng)將會(huì)自動(dòng)配置閾值。現(xiàn)在,當(dāng)單擊預(yù)覽框查看動(dòng)畫時(shí),可以拖動(dòng)紅色的短豎線以查看不同的更改,可用角度范圍是?-130~130。至此,動(dòng)畫控制器就配置好了。3.腳本
使用相應(yīng)的腳本來控制人物。記住須將角色的Tag設(shè)置為Player,并且還應(yīng)該對(duì)腳本進(jìn)行一定的設(shè)置,如圖4.53所示。4.動(dòng)畫方面的要求
每個(gè)混合樹的動(dòng)畫都有要注意的地方:(1)動(dòng)畫長度需要一致。(2)動(dòng)畫的起始姿勢需要一致。5.二維混合樹
它與一維混合樹相同,但是二維混合樹被視為平面,并且需要兩個(gè)參數(shù)來控制。此模式可用于更復(fù)雜的動(dòng)畫融合,因此在這里將不對(duì)其進(jìn)行深入講解??梢詫蓚€(gè)一維混合樹合并成一個(gè)二維混合樹來控制。6.多維混合樹Unity5中添加了多維混合樹,其配置更加復(fù)雜。多維混合樹通常用于面部表情動(dòng)畫融合。4.4.3Mecanim動(dòng)畫的資源存儲(chǔ)
使用FBX類型的模型和動(dòng)畫文件,通常在兩種情況下存儲(chǔ)動(dòng)畫文件。一種是將所有動(dòng)畫和模型都存儲(chǔ)在一個(gè)文件中,另一種是將模型存儲(chǔ)在一個(gè)文件中,而動(dòng)畫單獨(dú)存儲(chǔ)在另一個(gè)文件中。
以下所使用的資源是Unity3D隨附的兩種動(dòng)畫資源。同時(shí),有必要為其動(dòng)畫創(chuàng)建一個(gè)相應(yīng)的AnimatorController。1.模型和動(dòng)畫都存放在一個(gè)文件中的情況FBX文件保存模型、骨骼和動(dòng)畫,如圖4.54所示。下面是點(diǎn)擊上圖中任一動(dòng)畫后打開的控制器窗口,如圖4.55所示。應(yīng)該注意的是,官方?jīng)]有提供用于設(shè)置AnimatorController的接口,因此必須將已配置的游戲?qū)ο笞鳛轭A(yù)制組件進(jìn)行加載。2.模型和動(dòng)畫分開存放的情況
模型和動(dòng)畫存儲(chǔ)在多個(gè)FBX文件中,如圖4.56所示。
如圖4.57所示是配置的AnimatorController。除了不提供用于設(shè)置AnimatorController的界面外,在運(yùn)行時(shí)也無法添加或刪除動(dòng)畫剪輯。因此,通常收集所有依賴項(xiàng)并將它們打包在一起。歸根結(jié)底,只需要一個(gè)預(yù)制件。從這個(gè)角度來看,實(shí)際上是否分割動(dòng)畫,最終用法是一樣的。4.4.4高級(jí)功能應(yīng)用1.動(dòng)作游戲
可以使用Unity3D的Mecanim非常簡單地實(shí)現(xiàn)諸多功能,如動(dòng)畫重定向、提供可視化的Animation編輯器和Animator編輯器等,方便用戶創(chuàng)建和管理多個(gè)動(dòng)畫片段。Mecanim的3個(gè)高級(jí)功能如下:(1)AnimationCurve:可以根據(jù)動(dòng)畫的運(yùn)行時(shí)間來調(diào)整曲線,在播放動(dòng)畫時(shí)可以獲得與該曲線相對(duì)應(yīng)的值,并且可以實(shí)現(xiàn)跳小洞的功能。(2)TargetMatch:匹配預(yù)定點(diǎn)進(jìn)行動(dòng)畫播放,可以實(shí)現(xiàn)角色爬升的功能。(3)AnimationRecord:可以錄制動(dòng)畫,然后播放錄制的動(dòng)畫,可以實(shí)現(xiàn)時(shí)光倒流的功能。
可以說Unity3D現(xiàn)在具有開發(fā)與國際制造商相當(dāng)?shù)膭?dòng)作游戲的能力。2.AnimationCurve
直接使用官方網(wǎng)站上的示例打開ScaleCapsule場景。在運(yùn)行游戲時(shí),注意到角色當(dāng)前無法從墻上的洞跳出,如圖4.58所示。
原因很簡單,角色的膠囊碰撞體大于小孔。在檢查了右上角的“應(yīng)用比例”后,使角色跳躍,如圖4.59所示。
發(fā)現(xiàn)在角色跳躍時(shí),膠囊碰撞體會(huì)收縮,角色可以鉆過這個(gè)小孔,角色跳躍后膠囊體會(huì)恢復(fù)。找到動(dòng)畫文件Dive,就可以看到其設(shè)置了兩個(gè)Curve,如圖4.60所示。ScaleOffsetCapsule用于控制膠囊縮放的曲線,可以發(fā)現(xiàn)它的間隔為1→0→1。ScaleOffsetCapsule參數(shù)的設(shè)置,如圖4.61所示。ScaleOffsetCapsule參數(shù)的類型必須為Float,并且名稱必須與動(dòng)畫文件中Curve的名稱一致,在播放跳躍動(dòng)畫時(shí),將根據(jù)預(yù)設(shè)曲線來設(shè)置參數(shù)。注意,該參數(shù)后面的輸入框已被禁用,無法進(jìn)入。每幀獲取參數(shù)值,以實(shí)現(xiàn)減少跳躍碰撞體的功能。3.TargetMatch
在游戲中,經(jīng)常會(huì)出現(xiàn)角色的頭和腳在某一個(gè)時(shí)刻需要放在特定的位置,其處理核心是使用Animator的MatchTarget方法,TargetMatch就是讓動(dòng)畫的特定片段去匹配特定的位置。感興趣的讀者可通過網(wǎng)址/ScriptReference/Animator.MatchTarget.html來查看具體解釋。
在這里,仍然直接使用官方網(wǎng)站上給出的示例打開TargetMatch,如圖4.62所示。
觀察到已經(jīng)在該字段上方設(shè)置了一個(gè)目標(biāo)點(diǎn),并且角色的右手與此動(dòng)畫重合的點(diǎn)重合。注意,帶有MatchTarget的動(dòng)畫必須處于BaseLayer。MatchTarget插入角色位置的一部分和目標(biāo)點(diǎn)的位置以便移動(dòng)角色。結(jié)果是高于指定的爬升動(dòng)畫高度的任何爬升高度都可以調(diào)整。4.AnimationRecordUnity3D的Animator類為提供了4種錄制和播放動(dòng)畫的方法:(1)StartRecording:開始錄制動(dòng)畫。(2)StopRecording:停止錄制動(dòng)畫。(3)StartPlayback:開始播放錄制的動(dòng)畫。(4)StopPlayback:停止播放錄制的動(dòng)畫。同時(shí),還可以通過訪問Animator提供的一些屬性來了解有關(guān)動(dòng)畫錄制的相關(guān)信息:(1)playbackTime:播放時(shí)間。(2)recorderStartTime:開始錄制的時(shí)間。(3)recorderStopTime:記錄結(jié)束的時(shí)間。
它相對(duì)易于使用,因此未作為示例顯示。應(yīng)該注意的是,當(dāng)播放錄制的動(dòng)畫時(shí),角色將返回到錄制開始的坐標(biāo)點(diǎn),而不是在當(dāng)前坐標(biāo)點(diǎn)播放。4.5燈光系統(tǒng)4.5.1燈光系統(tǒng)簡介
光照貼圖技術(shù)是一種增強(qiáng)靜態(tài)場景光照效果的技術(shù)。游戲場景不可能都是靜態(tài)對(duì)象,因此,游戲場景中的照明通常是幾種照明方法的混合。對(duì)于靜態(tài)對(duì)象,通常使用光照貼圖來模擬間接光的照明效果,然后添加來自直接光源的動(dòng)態(tài)照明效果。
對(duì)于移動(dòng)的對(duì)象,可使用直接光源的動(dòng)態(tài)照明效果,或者使用光探頭模擬房間接收光的照明效果。Unity3D中的實(shí)時(shí)全局照明提供了可以實(shí)時(shí)計(jì)算的全局照明,但這對(duì)計(jì)算機(jī)性能的要求仍然很高。不過,隨著計(jì)算機(jī)硬件的改進(jìn),實(shí)時(shí)照明已應(yīng)用于游戲技術(shù)中。默認(rèn)情況下,Unity3D中可以創(chuàng)建的光源類型有自然光、點(diǎn)光源、聚光燈、區(qū)域光和兩種類型的探針反射探針、光照探針組如圖4.63所示。4.5.2DirectionalLight(自然光)Unity3D中的直接照明主要來自各種照明對(duì)象,并且照明對(duì)象本質(zhì)上是空對(duì)象加上照明組件。直接照明可以產(chǎn)生陰影,但是光不會(huì)被反射或折射,并且可以穿透半透明的物體。自然光設(shè)置如圖4.64所示。DirectionalLight的屬性作用如下:(1)Type:光源類型,所有類型的光源實(shí)際上共享一個(gè)組件,基本上是相同的。(2)Color:燈光顏色。(3)Mode:照明模式,每種模式對(duì)應(yīng)Light面板中的一組設(shè)置。其中,Realtime對(duì)應(yīng)RealtimeLight;Mixed對(duì)應(yīng)MixedLight;Baked對(duì)應(yīng)LightmappingSetting。(4)Intensity:燈光強(qiáng)度。(5)IndirectMultiplier:乘以燈光產(chǎn)生的間接照明的強(qiáng)度。(6)ShadowType:陰影貼圖的類型。其中,NoShadows指無陰影貼圖;HardShadows指硬陰影貼圖;SoftShadows指平滑的陰影邊緣(即陰影模糊效果);BakedShadowAngle指烘焙陰影的角度。同時(shí),該屬性還包括:①RealtimeShadowsStrength實(shí)時(shí)陰影強(qiáng)度。②Resolution陰影貼圖分辨率。③Bias陰影偏移,通常適當(dāng)?shù)卦黾哟酥悼杉m正一些陰影偽像。④NormalBias正常偏差,通常適當(dāng)降低此值可校正某些陰影偽像(與使用Bias不同)。⑤NearPlane陰影裁剪平面,對(duì)于小于相機(jī)此距離的場景對(duì)象,不會(huì)生成陰影。(7)Cookie:Cookie等效于在燈光上粘貼黑白圖像模擬某些陰影效果,例如粘貼網(wǎng)格圖像模擬窗口網(wǎng)格效果。(8)CookieSize:調(diào)整Cookie的大小。(9)DrawHalo:燈光是否發(fā)光,不發(fā)光的光線是不可見的。(10)Flare:眩光可以使用黑白貼圖來模擬鏡頭中光線的“星光”效果。(11)RenderMode:渲染模式。包含自動(dòng)、重要逐像素進(jìn)行渲染和不重要(以最快速度渲染)。(12)CullingMask:消除遮擋圖,與選定圖層關(guān)聯(lián)的對(duì)象將受到光源的影響。4.5.3PointLight(點(diǎn)光源)
點(diǎn)光源模擬了一個(gè)小燈泡向周圍發(fā)光的效果。點(diǎn)光源在其照明范圍內(nèi)隨著距離的增加而減弱其亮度。點(diǎn)光源設(shè)置列表如圖4.65所示。PointLight的屬性作用如下:(1)Range:光源的范圍,從光源對(duì)象中心發(fā)射的距離。(2)Color:光源的顏色。(3)Mode:照明模式,每種模式對(duì)應(yīng)Light面板中的一組設(shè)置。其中,Realtime對(duì)應(yīng)RealtimeLight;Mixed對(duì)應(yīng)MixedLight;Baked對(duì)應(yīng)LightmappingSetting。(4)Intensity:燈光強(qiáng)度,只有Point和Spotlight有該參數(shù)。(5)IndirectMultiplier:乘以燈光產(chǎn)生的間接照明的強(qiáng)度。(6)ShadowType:陰影貼圖的類型。其中,NoShadows指無陰影貼圖;HardShadows指硬陰影貼圖;SoftShadows指平滑的陰影邊緣(即陰影模糊效果)。(7)DrawHalo:燈光是否發(fā)光,不發(fā)光的光線是不可見的。(8)Flare:眩光可以使用黑白貼圖來模擬鏡頭中光線的“星光”效果。(9)RenderMode:渲染模式。包含自動(dòng)、重要逐像素進(jìn)行渲染和不重要(以最快速度渲染)。(10)CullingMask:消除遮擋圖,與選定圖層關(guān)聯(lián)的對(duì)象將受到光源的影響。4.5.4SpotLight(聚光燈)
聚光燈模擬點(diǎn)光源僅沿圓錐體方向發(fā)光的效果,其亮度在照明范圍內(nèi)隨著距離的增加而衰減。聚光燈設(shè)置列表如圖4.66所示。4.5.5AreaLight(區(qū)域光)
區(qū)域光是模擬大發(fā)光表面對(duì)周圍環(huán)境的照明效果。通常,區(qū)域光的亮度快速衰減,陰影非常柔和。Unity3D的區(qū)域光僅在烘焙光照貼圖時(shí)才有效,并且不會(huì)像Maya的區(qū)域光一樣動(dòng)態(tài)照亮場景。區(qū)域光設(shè)置列表如圖4.67所示。4.5.6LightProbes(燈光探針)LightProbes是一種用于實(shí)時(shí)渲染的高級(jí)照明技術(shù),它是ReflectionProbes與LightProb
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 各類建筑工程施工方案設(shè)計(jì)
- 垃圾填埋場項(xiàng)目可行性研究報(bào)告
- 做東南亞跨境電商平臺(tái)
- 肉鴨養(yǎng)殖項(xiàng)目可行性研究報(bào)告
- 大數(shù)據(jù)時(shí)代企業(yè)數(shù)據(jù)安全管理制度手冊(cè)
- 動(dòng)力電池再生利用
- 三農(nóng)村電氣化工程作業(yè)指導(dǎo)書
- 高職護(hù)理婦產(chǎn)科復(fù)習(xí)測試卷附答案
- 附件3醫(yī)院護(hù)類人員年終理論考試500題練習(xí)試題附答案
- 智能環(huán)保與資源利用作業(yè)指導(dǎo)書
- 眼科學(xué)基礎(chǔ)本科
- 小沈陽《四大才子》歡樂喜劇人臺(tái)詞
- 交通安全設(shè)施作業(yè)指導(dǎo)書
- 優(yōu)秀員工榮譽(yù)證書模板
- 神奇的電家長課堂
- 城南舊事讀書匯報(bào)教學(xué)課件
- 不銹鋼容器制造通用標(biāo)準(zhǔn)工藝守則
- 校園環(huán)境衛(wèi)生檢查及記錄表
- 合同能源管理合同范本模板
- Q∕SY 05006-2016 在役油氣管道 第三方施工管理規(guī)范
- 數(shù)值分析 第二章 代數(shù)插值解析
評(píng)論
0/150
提交評(píng)論