前言
動(dòng)畫事件(Animation Events)是一種附屬于Animation Clips 的事件瞭吃,它們在動(dòng)畫發(fā)展到一定程度時(shí)觸發(fā)受楼,從而實(shí)現(xiàn)一些特殊的功能鼎文。熟悉怎么添加動(dòng)畫事件可以省去很多不必要的麻煩,而且它確實(shí)非常簡單汽纠。
事件(Event):事件是一種條件式的函數(shù)抬驴,當(dāng)滿足某些條件時(shí)才會(huì)被調(diào)用炼七。最簡單的例子就是鼠標(biāo)點(diǎn)擊事件,鍵盤按下時(shí)間等布持,這些事件在寫GUI的時(shí)候經(jīng)常會(huì)用到豌拙。我們需要做的只是把事件函數(shù)綁定到監(jiān)聽器(Listener)上,然后等到條件滿足的時(shí)候题暖,監(jiān)聽器就會(huì)代替我們執(zhí)行按傅。?
動(dòng)畫事件(Animation Event):動(dòng)畫事件就是時(shí)間的一種,它的觸發(fā)條件是動(dòng)畫播放到指定的幀胧卤。我們只需要編寫事件函數(shù)唯绍,選擇一個(gè)具體的Animation的具體幀作為觸發(fā)點(diǎn),每次動(dòng)畫播放到指定的幀時(shí)灌侣,便會(huì)調(diào)用一次動(dòng)畫事件推捐。
在Unity中,我們需要關(guān)心的只是動(dòng)畫事件的內(nèi)容(編寫腳本)以及選擇合適的時(shí)間(在Animation視圖中進(jìn)行)侧啼,其他的都不需要我們管牛柒,可以說是非常智能了。接下來就簡單地寫一個(gè)Unity腳本痊乾,并把它綁定到一個(gè)Animation上皮壁。
第一步依然是選擇一個(gè)游戲物體作為動(dòng)畫的載體,我們按照慣例直接創(chuàng)建Cube作為游戲?qū)ο蟆?/p>
第二步我們需要編寫一個(gè)專門存放動(dòng)畫事件的腳本哪审。直接在Project視圖中鼠標(biāo)右鍵單擊?Create - C# Script蛾魄,將腳本命名為AnimEvents.cs,然后修改它的內(nèi)容為
這個(gè)腳本定義了一個(gè)showMsg函數(shù)湿滓,它負(fù)責(zé)把接受到的msg字符串打印到Console上滴须。修改完成后我們只需把腳本拖拽到Hierarchy的Cube對(duì)象上,就可以把腳本作為Cube的組件叽奥。
第三步則需要?jiǎng)?chuàng)建一個(gè)新的Animation Clip扔水。如果不知道如何創(chuàng)建Animaiton Clip,可以參照我之前的博文創(chuàng)建Animation Clip朝氓。創(chuàng)建完成后我們應(yīng)該在Animation窗口看到類似的圖像魔市。?
第四步便要選擇一個(gè)具體的動(dòng)畫幀作為事件的觸發(fā)時(shí)間主届。首先移動(dòng)紅線到理想的采樣幀,這里選擇的是0:30待德;接著點(diǎn)擊左側(cè)屬性列表右上角的添加事件按鈕君丁,就會(huì)在紅色所在的位置添加一個(gè)Animation Events。添加成功后可以在時(shí)間軸的下面看到一個(gè)標(biāo)記将宪,提示我們動(dòng)畫事件已經(jīng)成功添加绘闷。
這時(shí)我們點(diǎn)擊事件標(biāo)記就可以在觀察窗口(Inspector)中查看到可供選擇的函數(shù)。因?yàn)槲覀冎耙呀?jīng)在Cube上添加了一個(gè)AnimEvents腳本涧偷,所以AnimEvents中的函數(shù)可以作為動(dòng)畫事件函數(shù)被調(diào)用簸喂。
注意?并不是所有的函數(shù)都可以被當(dāng)做動(dòng)畫事件函數(shù)的,可以被調(diào)用的動(dòng)畫事件函數(shù)必須滿足以下規(guī)則:?
1. 最多只能接受一個(gè)參數(shù)?
2. 參數(shù)的類型必須是Int, Float,String, Object中的一種
我們選擇showMsg作為Animation Event的函數(shù)燎潮,然后就會(huì)發(fā)現(xiàn)多出了一個(gè)Parameters String喻鳄,這是因?yàn)槲覀冎岸x的showMsg函數(shù)接受一個(gè)string作為參數(shù),所以我們在Inspector窗口輸入的值會(huì)作為參數(shù)被函數(shù)處理确封。你可以輸入“Hello World”除呵,然后運(yùn)行游戲,我們可以發(fā)現(xiàn)每當(dāng)動(dòng)畫進(jìn)行到一半時(shí)爪喘,Console上都會(huì)輸出“Hello World”颜曾,和我們預(yù)想的結(jié)果一致。?
另一種視角?
如果你在Project視圖中找到我們使用的Animation并在Animation視圖中打開它秉剑,你會(huì)驚奇地發(fā)現(xiàn)之前的Animation Events換了一種格式泛豪。這是因?yàn)橹拔覀兪窃诰唧w的游戲物體上操作,以游戲物體作為對(duì)象侦鹏,游戲物體上所有腳本中的函數(shù)都會(huì)被考慮進(jìn)來诡曙。而直接在Project視圖中打開則是以Animation為對(duì)象,這樣我們就會(huì)看到之前選擇的函數(shù)被Animation自動(dòng)處理為了一個(gè)函數(shù)名和參數(shù)列表固定的函數(shù)原型(prototype)略水,這樣我們就算把這個(gè)Animation添加到其他游戲物體上价卤,只要其他的游戲物體存在與該函數(shù)原型類似的函數(shù)就可以成功調(diào)用。這么看渊涝,Unity確實(shí)是十分智能慎璧。?
這次文章比較短=_=懶得總結(jié)了~~~~希望你早日學(xué)會(huì)使用Animation Events