Unity中的Animation組件(一)

我們可以使用Unity自帶的資源來(lái)學(xué)習(xí)老版本的動(dòng)畫系統(tǒng),新建Unity3D項(xiàng)目,選擇菜單“Assets”->“Import Package”->“Character Controller”,導(dǎo)入的資源里的那個(gè)小人就是使用Legacy動(dòng)畫系統(tǒng)的模型,我們的學(xué)習(xí)可以基于他來(lái)進(jìn)行。

模型文件


在骨骼這一項(xiàng)中,我們發(fā)現(xiàn)動(dòng)畫類型的設(shè)置就是Legacy,說(shuō)明這個(gè)模型使用的動(dòng)畫類型為老版本的動(dòng)畫系統(tǒng)。

我們?cè)倏纯磩?dòng)畫頁(yè):

動(dòng)畫頁(yè)中,我們可以對(duì)動(dòng)畫剪輯進(jìn)行編輯。

控制動(dòng)畫

我們直接將FBX文件拖入場(chǎng)景,Unity會(huì)自動(dòng)幫我們添加Transform和Animation兩個(gè)組件(注意Mecanim動(dòng)畫系統(tǒng)使用的是Animator組件,Legacy動(dòng)畫系統(tǒng)使用的是Animation組件)。

Animation組件的設(shè)置還是比較簡(jiǎn)單的:

Animation:當(dāng)前播放的動(dòng)畫。

Animations:所有可以播放的動(dòng)畫。

Play Automatically:是否自動(dòng)播放。

Animate Physics:動(dòng)畫是否和物理世界進(jìn)行交互。

Culling Type:動(dòng)畫在不可見時(shí)是否還繼續(xù)播放,優(yōu)化選項(xiàng)默認(rèn)即可。

點(diǎn)擊播放按鈕就可以看見動(dòng)畫正常播放了。

animation組件用于播放動(dòng)畫;

如果想播放一個(gè)簡(jiǎn)單的動(dòng)畫,可以使用Animation.Play;

如果想在動(dòng)畫之間交叉淡入,可以使用Animation.CrossFade;

如果想改變動(dòng)畫模式(循環(huán),一次,乒乓),可以改變動(dòng)畫導(dǎo)入設(shè)置里面的動(dòng)畫幀的WrapMode,或者在運(yùn)行時(shí)改變AnimationState.wrapMode的值;

AnimationState可以用于改變動(dòng)畫的層,修改播放速度,并且直接控制混合與合成。

腳本控制

下面我們來(lái)看看如何使用腳本控制動(dòng)畫的播放,我們將下面的腳本綁定到人物身上即可。

using UnityEngine;

using System.Collections;

public class AnimationScript : MonoBehaviour

{

private Animation _animation;

void Start()

{

_animation = this.animation;

}

void OnGUI()

{

//直接播放動(dòng)畫

if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))

{

_animation.Play("idle");

}

if(GUI.Button(new Rect(100, 0, 100, 30), "walk"))

{

_animation.Play("walk");

}

if(GUI.Button(new Rect(200, 0, 100, 30), "run"))

{

_animation.Play("run");

}

if(GUI.Button(new Rect(300, 0, 100, 30), "jump_pose"))

{

_animation.Play("jump_pose");

}

//使用融合來(lái)播放動(dòng)畫

if(GUI.Button(new Rect(0, 30, 100, 30), "idle"))

{

_animation.CrossFade("idle");

}

if(GUI.Button(new Rect(100, 30, 100, 30), "walk"))

{

_animation.CrossFade("walk");

}

if(GUI.Button(new Rect(200, 30, 100, 30), "run"))

{

_animation.CrossFade("run");

}

if(GUI.Button(new Rect(300, 30, 100, 30), "jump_pose"))

{

_animation.CrossFade("jump_pose");

}

}

}

運(yùn)行程序,會(huì)看見兩排按鈕,其中第一排按鈕使用Play方法來(lái)切換動(dòng)畫,而第二排按鈕則使用CrossFade來(lái)播放動(dòng)畫。

Play與CrossFade的區(qū)別

以從跑步切換到站立動(dòng)畫為例來(lái)看:

Play:直接切換動(dòng)畫,如果人物之前處于傾斜跑步狀態(tài),則會(huì)立即變成站立狀態(tài),表現(xiàn)上比較不真實(shí),特別是當(dāng)兩個(gè)動(dòng)畫姿勢(shì)差別較大時(shí)。

CrossFade:通過(guò)動(dòng)畫融合來(lái)切換動(dòng)畫,第二個(gè)參數(shù)可以指定融合的時(shí)間,如果人物之前處于傾斜跑步狀態(tài),則會(huì)在指定的融合時(shí)間內(nèi)逐漸變成站立狀態(tài),表現(xiàn)上接近真實(shí)的人物動(dòng)作切換效果。

但是當(dāng)使用CrossFade播放跳躍動(dòng)畫時(shí)會(huì)出現(xiàn)問(wèn)題,主要問(wèn)題是跳躍動(dòng)畫不是循環(huán)播放且其持續(xù)時(shí)間小于動(dòng)畫融合的時(shí)間,我們修改為下面的腳本指定融合時(shí)間短一點(diǎn)就可以正常進(jìn)行跳躍的融合播放了:

_animation.CrossFade("jump_pose", 0.1f);

PlayQueued

該方法可以指定當(dāng)當(dāng)前的動(dòng)畫播放完畢后接下來(lái)播放的動(dòng)畫,如下:

_animation.PlayQueued("run", QueueMode.CompleteOthers, PlayMode.StopSameLayer);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,802評(píng)論 25 709
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,705評(píng)論 8 183
  • 今天這本書有三個(gè)故事巜撥苗助長(zhǎng)》,巜黃香溫席》,巜驢和鹽》,這三個(gè)故事都不長(zhǎng)但很有意義,給寶貝傳遞了,有些事不能過(guò)...
    19a250176c93閱讀 770評(píng)論 0 0
  • 先附上一張圖,來(lái)欣賞一下大師的語(yǔ)言吧。 上周和孩子們學(xué)習(xí)《金錢的魔力》,這篇課文選自馬克·吐溫的著名短篇小說(shuō)《百萬(wàn)...
    靜說(shuō)凡語(yǔ)閱讀 390評(píng)論 0 1
  • 昨天半夜接近12點(diǎn)寶寶醒來(lái),到凌晨1點(diǎn)才又睡著我卻睡不著了,玩手機(jī),聽CEO課程錄音,凌晨三點(diǎn)半才又關(guān)燈睡下結(jié)果,...
    蕎米閱讀 210評(píng)論 0 0

友情鏈接更多精彩內(nèi)容