目錄
新建動(dòng)畫Animation
Animation組件解釋
應(yīng)用舉例1:制作動(dòng)畫片段
應(yīng)用舉例2:添加動(dòng)畫事件
Animator動(dòng)畫控制器
應(yīng)用舉例3:在Animator中設(shè)置動(dòng)畫片段間的跳轉(zhuǎn)
本篇使用的API:Animation、Animator以及Animator類中的SetFloat、SetInteger、SetBool等,以及短小動(dòng)畫片段的制作
新建動(dòng)畫Animation
? 必須選擇一個(gè)對(duì)象來(lái)建立動(dòng)畫,選擇Window->Animation->Animation,在彈出窗口中點(diǎn)擊“創(chuàng)建”
??
創(chuàng)建完成后,Animation中就出現(xiàn)了動(dòng)畫幀,同時(shí)在放置動(dòng)畫的文件夾中會(huì)自動(dòng)添加一個(gè)動(dòng)畫控制器Animator,并在添加動(dòng)畫的物體上掛載Animator組件:
?Animation組件解釋
? 可以制作位置移動(dòng)、旋轉(zhuǎn)或縮放等類型的動(dòng)畫,點(diǎn)擊對(duì)應(yīng)的+號(hào),就可以在時(shí)間軸上創(chuàng)建相關(guān)的幀:
?
?應(yīng)用舉例1:制作動(dòng)畫片段
?1. 按上面的步驟創(chuàng)建Animation后,點(diǎn)擊“AddProperty”選擇Transform中的Position,先制作一個(gè)移動(dòng)的動(dòng)畫。點(diǎn)擊“錄制”按鈕開(kāi)始錄制動(dòng)畫:
? ?2. 這里是動(dòng)畫初始的狀態(tài),然后將幀的指針拖到下一個(gè)狀態(tài)的位置,比如0:10的位置。同時(shí)也將動(dòng)畫人物放置到下一個(gè)位置,Animation會(huì)自動(dòng)新建關(guān)鍵幀。:
??
? ?3. 以此類推,不斷將指針移動(dòng)到關(guān)鍵幀位置,并相應(yīng)地設(shè)置動(dòng)畫人物到各個(gè)位置,完成后關(guān)閉錄制按鈕:
?
? 4. 點(diǎn)擊“播放”按鈕,可以預(yù)覽動(dòng)畫的效果:
?
應(yīng)用舉例2:添加動(dòng)畫事件
? 在動(dòng)畫播放的過(guò)程中,有時(shí)候需要觸發(fā)一些事件的回調(diào),比如人物跳著跳著撒出一些金幣,或者走著走著說(shuō)了一句話,這就需要在動(dòng)畫中添加一個(gè)事件。
? 1. 將指針拖到需要事件回調(diào)的位置,點(diǎn)擊按鈕“AddEvent”:
? ?2. 編輯腳本:這里寫一個(gè)測(cè)試腳本Test.cs,并掛載在動(dòng)畫物體上:
public class Test : MonoBehaviour
{
public void TestAnime()
{
Debug.Log("跳啊跳啊");
}
}
? 3. 點(diǎn)擊動(dòng)畫上的事件,在下拉菜單中就能看到這個(gè)測(cè)試的函數(shù):
? ?4. 運(yùn)行一下場(chǎng)景,每當(dāng)動(dòng)畫執(zhí)行到這個(gè)事件時(shí),就會(huì)調(diào)用TestAnime()這個(gè)函數(shù):
?Animator動(dòng)畫控制器
? Animator是一個(gè)動(dòng)畫的控制器,在創(chuàng)建動(dòng)畫Animation時(shí),自動(dòng)會(huì)創(chuàng)建。它管理動(dòng)畫人物在什么狀態(tài)下應(yīng)該播放什么動(dòng)畫片段,這樣就可以簡(jiǎn)單地使用設(shè)置來(lái)控制不同動(dòng)畫播放,而不用寫代碼。
? Animator組件就默認(rèn)掛在動(dòng)畫人物上:
? 同時(shí)還創(chuàng)建了一個(gè)Animator控制器,例如上面創(chuàng)建的動(dòng)畫“HeroAnimation”,它的Animator控制器“Hero”(默認(rèn)在同一文件夾中),雙擊它就能打開(kāi)控制界面:
? ?其中AnyState、Entry和Exit三個(gè)節(jié)點(diǎn)是默認(rèn)的,目前只有一個(gè)HeroAnimation動(dòng)畫片段。單擊HeroAnimation動(dòng)畫,可以在Inspector窗口中看到它的屬性:
? 如果需要添加第二段動(dòng)畫,可以在狀態(tài)機(jī)的空白處點(diǎn)右鍵新建,并且添加跳轉(zhuǎn)箭頭到新的動(dòng)畫上:
??
? ?單擊跳轉(zhuǎn)箭頭,可以看到右邊的Inspector中的跳轉(zhuǎn)條件設(shè)置:
? 這里的跳轉(zhuǎn)條件由Animator中設(shè)置的參數(shù)控制:
應(yīng)用舉例3:在Animator中設(shè)置動(dòng)畫片段間的跳轉(zhuǎn)
? 1. 先制作兩個(gè)簡(jiǎn)單的動(dòng)畫片段Animation:站立動(dòng)畫HeroIdle(Scale上的變化),跳躍動(dòng)畫HeroJump
??
? 2. 將兩個(gè)動(dòng)畫片段拖入Animator:
? ?3. 建立動(dòng)畫過(guò)渡,在HeroIdle上點(diǎn)右鍵->MakeTransition,建立從HeroIdle到HeroJump的轉(zhuǎn)場(chǎng):
? ?
? ?4. 反向也建立一條:
? ?5. 在Animator的參數(shù)頁(yè),建立一個(gè)Float類型的參數(shù),取名為changeFloat:
?
? ?6. 點(diǎn)擊向下的專場(chǎng)箭頭,在Inspector中為它建立轉(zhuǎn)場(chǎng)的條件:
? 在Conditions下方點(diǎn)“+”號(hào),添加一個(gè)轉(zhuǎn)場(chǎng)條件,在其中選擇剛剛建立的這個(gè)浮點(diǎn)數(shù)changeFloat,設(shè)置條件,當(dāng)它的值大于1時(shí),動(dòng)畫跳轉(zhuǎn)到HeroJump,而它的初始值是0:
? ?7. 測(cè)試代碼,掛在Hero身上。這里使用API"SetFloat"就可以訪問(wèn)到轉(zhuǎn)場(chǎng)的參數(shù):
public class AnimeSwitch : MonoBehaviour
{
private Animator animator;
void Start()
{
animator= GetComponent<Animator>();//獲取主角身上的Animator組件
}
void Update()
{
if(Input.GetKey(KeyCode.Space))
{//當(dāng)按下Space按鍵時(shí),把changeFloat值改為大于1
animator.SetFloat("changeFloat", 1.1f);
}
else animator.SetFloat("changeFloat", 0f );//不按的時(shí)候改回0
}
}
?8. 效果:平時(shí)播放站立動(dòng)畫,按下Space按鍵就跳一下。
? ?狀態(tài)機(jī)中的表現(xiàn),按下space的時(shí)候跳轉(zhuǎn)到Jump動(dòng)畫,然后跳轉(zhuǎn)回來(lái):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474985.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474985.html
到了這里,關(guān)于UnityVR--組件5--Animation動(dòng)畫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!