Mecanim动画系统
本期教程和大家分享Mecanim動畫系統(tǒng)的重定向特性,Mecanim動畫系統(tǒng)是Unity3D推出的全新的動畫系統(tǒng),具有重定向、可融合等諸多新特性,通過和美工人員的緊密合作,可以幫助程序設(shè)計(jì)人員快速地設(shè)計(jì)出角色動畫。一起跟著人氣博主秦元培學(xué)習(xí)吧!
博主今天想和大家分享的是Mecanim動畫系統(tǒng)的重定向特性,眾所周知,《仙劍奇?zhèn)b傳》是一部經(jīng)典的RPG游戲,這部游戲到今天依然煥發(fā)著強(qiáng)大的生命力。博主在網(wǎng)上認(rèn)識了一個制作《仙劍奇?zhèn)b傳》同人游戲的小團(tuán)隊(duì),他們目前正在著手制作一個稱為《仙劍奇?zhèn)b傳五外傳:心愿》的同人游戲,該游戲基于Unity3D,由于技術(shù)上的一致性,博主向他們索取了一些游戲素材,而這成為了博主決心要研究Mecanim動畫系統(tǒng)的一個主要原因。如圖是《仙劍奇?zhèn)b傳五前傳》中瑕的一個模型:
拿到這個模型的時候,博主發(fā)現(xiàn)這個模型的所有動畫都是放在一個AnimationClip中的,所以博主果斷將這個動畫文件進(jìn)行了分割,分割的方法是在資源目錄中找到這個AnimationClip,然后在右側(cè)的屬性窗口中選擇Animations選項(xiàng)卡中通過+號來新建一個AnmationClip,在指定了起點(diǎn)幀數(shù)和終點(diǎn)幀數(shù)后就實(shí)現(xiàn)對動畫的分割。如圖示博主經(jīng)過分割后的動畫文件列表:
可以看到這里博主將一個動畫片段分割成了4個動畫片段,這樣我們就可以通過Animation組件來實(shí)現(xiàn)對動畫的播放。而這正是在Mecanim動畫系統(tǒng)推出之前Unity3D采用的動畫控制形式。由于這個模型在建模的時候存在問題,所以導(dǎo)致瑕在游戲場景中的角度出現(xiàn)錯誤,博主只好自己用3D建模軟件進(jìn)行調(diào)整,結(jié)果意外得發(fā)現(xiàn)瑕的模型中是有骨骼的,博主忽然間想到了一個問題,是否可以利用Mecanim動畫系統(tǒng)來為這個模型添加動畫呢?答案是肯定的。由于這個模型在建模的時候?qū)赢嫼湍P鸵黄饎?chuàng)建了,因此我們需要首先將這個動畫從模型中去除,因?yàn)镸ecanim動畫系統(tǒng)的一個主要思路就是讓一套動畫可以通過重定向應(yīng)用到不同的模型上,既然有動畫可用,那么模型自帶的動畫可以暫時去除。而讓動畫從模型中去除的方法很簡單,就是在導(dǎo)出FBX模型的時候?qū)⑶度氲拿襟w選項(xiàng)不要勾選,這樣我們的模型就可以和動畫分離開了,經(jīng)過這一步后,我們正式開始Mecanim動畫系統(tǒng)的講解。要理解Mecanim動畫系統(tǒng),首先需要了解這樣幾個概念:
一、Avater,即阿凡達(dá),這是Mecanim動畫系統(tǒng)中實(shí)現(xiàn)動畫綁定的一個接口,該接口可以實(shí)現(xiàn)骨骼和肌肉系統(tǒng)的匹配,從而保證角色在執(zhí)行動畫的時候,角色能夠按照預(yù)先設(shè)定的動畫來運(yùn)動。我們首先在項(xiàng)目資源窗口中找到了模型文件,如圖:
我們注意到在右側(cè)的屬性窗口中有三個選項(xiàng)卡:Model、Rig、Animations。這里我們選擇Rig選項(xiàng)卡,將Animation Type設(shè)為Humanoid,即雙足類型的動畫。這種類型可以支持大多數(shù)的類人形的模型。此外,Lagacy類型用來兼容Unity3D低版本中的模型動畫,Generic類型是一種介于人形和非人形的模型之間的通用類型。我們選擇Humanoid類型后,在下方選擇生成Avater的類型誒Create Form This Model,即通過當(dāng)前的模型來生成一個Avater。此時,Configure按鈕由不可用狀態(tài)變成可用狀態(tài),我們點(diǎn)擊該按鈕,如果我們沒有保存游戲場景的話,此時Unity3D會提示我們保存場景,我們直接選擇保存,接下來回打開一個新的場景,如圖:
此時場景中會顯示模型的骨骼結(jié)構(gòu),對應(yīng)地,在右側(cè)窗口中顯示了該模型主要的身體結(jié)構(gòu),可以看到此時右側(cè)窗口中所有的點(diǎn)都是以綠色顯示的,這表示當(dāng)前模型的骨骼關(guān)節(jié)和模型匹配正確。此時,我們可以切換到Muscles選項(xiàng)卡中,這是我們可以通過拖動滑塊來檢查模型匹配是否正確。在使用Avater的時候,有兩點(diǎn)需要注意:
1、如果模型建模沒有嚴(yán)重的錯誤的話,可以通過窗口底部的Mipping->AutoMap來實(shí)現(xiàn)對模型的自動匹配,這一點(diǎn)可以提高工作效率,但是作為一名有節(jié)操的開發(fā)人員,我們絕不能過度地依賴于這一功能。
2、當(dāng)在手動調(diào)整模型匹配時,如果提示T-Pose錯誤,可以通過Pose->Enforce T-Pose來實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)化,博主最近才開始學(xué)習(xí)游戲建模,所以這里可能暫時無法解釋清楚,大家就作為經(jīng)驗(yàn)之談來看吧。
確認(rèn)模型匹配沒有什么問題后,點(diǎn)擊Done完成編輯。
二、AnimatorController:如果說Avater是將模型的身體和骨骼實(shí)現(xiàn)匹配的接口,那么AnimatorController就是講動畫和模型實(shí)現(xiàn)綁定的接口。我們這里創(chuàng)建一個XiaAnimaterController。雙擊該文件,會打開Animator窗口,如圖:
博主這里不想詳細(xì)介紹關(guān)于Unity3D動畫系統(tǒng)中的狀態(tài)機(jī)和混合樹等概念,因?yàn)檫@些概念現(xiàn)在解釋起來實(shí)在困難,博主打算放在下一篇文章中來詳細(xì)的講解Mecanim動畫的狀態(tài)機(jī)和混合樹的概念。今天我們只是對Mecanim動畫系統(tǒng)做一個初步的了解,因?yàn)橐霃氐桌斫膺@個動畫系統(tǒng),絕非一朝一夕之功啊。博主在這里創(chuàng)建了6種動畫狀態(tài),并通過帶箭頭的線條將它們連了起來。博主這里想實(shí)現(xiàn)什么功能呢?博主希望在一定條件下可以觸發(fā)相應(yīng)的條件,當(dāng)出發(fā)結(jié)束后立即回到默認(rèn)的狀態(tài),這里默認(rèn)的狀態(tài)是Idle。估計(jì)大家到這里會有點(diǎn)混亂,博主前面不是說這個模型沒有動畫的嘛,那么這個的動畫是哪里來的呢?對此,博主這里做一下解釋啊,博主在創(chuàng)建這個項(xiàng)目之前呢,提前準(zhǔn)備了一個叫做WomanKnightAnimationPack的動畫包,它提供了游戲中常用的動畫,我們這里就是要通過Mecanim的重定向功能將這個動畫運(yùn)用到我們的模型上去,這個動畫包可以從官方的資源商店中下載。好了,現(xiàn)在我們來講解怎么講動畫和模型綁定,我們單擊默認(rèn)的Idle動畫,在窗口右側(cè)將會顯示如下內(nèi)容:
通過Motion文本框我們可以為當(dāng)前的狀態(tài)綁定一種動畫,選中Foot IK和Mirror這兩個選項(xiàng),似乎可以解決角色在行走或者奔跑過程中出現(xiàn)的問題,可是博主在查API文檔的時候并沒有找到相關(guān)的解釋,如果有朋友知道的話,希望可以告訴博主啊。類似地,我們可以為不同的狀態(tài)綁定一個動畫片段,可是問題馬上又來了,我們?nèi)绾伟凑沼螒虿邉澰谶m當(dāng)?shù)貢r候播放相應(yīng)的動畫呢?這就是動畫的觸發(fā)問題了,博主請大家想一想有限狀態(tài)機(jī)的概念,如果不知道這個概念的,請自行了解,這是游戲設(shè)計(jì)中非常重要、非常有用的一個概念。我們知道在有限狀態(tài)機(jī)中,無論我們使用switch-case結(jié)構(gòu)還是if-else結(jié)構(gòu),都需要一個狀態(tài)值來作為判斷的依據(jù),那么在Mecanim中這個原則依然適用。因?yàn)?#xff0c;Mecanim動畫系統(tǒng)就是基于狀態(tài)機(jī)的。好了,下面我們來創(chuàng)建一個狀態(tài)值。如圖,
在Mecanim動畫系統(tǒng)中提供了四種類型的狀態(tài)值,分別是Float、Int、Bool、Trigger,其中Trigger和OnTrigger()方法可以聯(lián)用,實(shí)現(xiàn)觸發(fā)式播放動畫。好了,現(xiàn)在我們創(chuàng)建一個整型的狀態(tài)值,默認(rèn)值為0。我們首先選中Idle->Walk這條路線,在右側(cè)的窗口中將參數(shù)設(shè)為ActionID,將值設(shè)為1,將方法設(shè)為Equals,其含義是當(dāng)ActionID的取值為1時將執(zhí)行Walk動畫。同樣地,我們將Walk->Idle這條路線選中,設(shè)將參數(shù)設(shè)為ActionID,將值設(shè)為0,將方法設(shè)為Equals,其含義是當(dāng)ActionID的取值為1時將執(zhí)行Idle動畫。其余的動畫狀態(tài)參數(shù)和Walk設(shè)置方法相同,從Idle出發(fā)的線路依次為1,2,3,4,5,指向Idle的路線全部為0。現(xiàn)在我們將這個AnimatorController指定給場景中的模型,如圖:
此時我們運(yùn)行程序,由于我們已經(jīng)為瑕指定了默認(rèn)的動畫,于是我們將看到:
雖然這個動畫和我們的瑕妹子搭配得有點(diǎn)違和,但是我們已經(jīng)初步掌握了使用Mecanim動畫系統(tǒng)的方法,好了,下面我們來編寫一段腳本來控制人物切換動畫,因?yàn)橹挥心J(rèn)動畫是沒有什么實(shí)際用途的:
最后我們一起來看實(shí)際的效果吧!
場景中的地形由Unity3D自帶的地形工具創(chuàng)建,其實(shí)博主是想搭建一個《仙劍奇?zhèn)b傳五前傳》中的云來石的場景,因?yàn)椴┲鲌?jiān)信,憑借瑾軒的智慧怎么會想不到在和瑕雙雙墜崖后召喚云來石呢,所以博主堅(jiān)信他們倆都沒有死,因?yàn)槟航阕詈蠡仨囊凰查g表情是喜悅的,而背后傳來了一急一慢兩種腳步聲,所以結(jié)局大家可以自己去想象啦。在同人游戲《仙劍奇?zhèn)b傳五后傳:心愿》中他們策劃的劇情和博主的基本一致,或許這就是《仙劍奇?zhèn)b傳》系列游戲之所以能讓博主一直愿意樂觀下去、努力下去的原因吧,我們都是普通人,可是我們并不是因?yàn)槠胀ǘ胀?#xff0c;而是我們選擇了不作為。以前博主聽說過一款由仙劍玩家發(fā)起的游戲《仙劍奇?zhèn)b傳四:回到起點(diǎn)》,當(dāng)時看到游戲的宣傳動畫時激動了好一陣子,可是到了后來這部游戲因?yàn)橹谱鲌F(tuán)隊(duì)的解散而宣布停止,這似乎總讓人想起上海軟星的過去。細(xì)心的朋友一定發(fā)現(xiàn)了博主使用的素材是仙劍四中的模型,可以發(fā)現(xiàn)這個模型是較為簡陋的,樹木基本上是紙片拼成的,影子是在模型里創(chuàng)建的,當(dāng)年弓長君帶領(lǐng)上軟制作仙劍三、仙劍三外傳、仙劍四的艱難程度可窺一斑。不過目前由上軟核心骨干組成的上海燭龍已經(jīng)從當(dāng)年的困境中走了出來,成為和大宇雙劍抗衡的第三把劍。為何博主總是鐘情于劍呢?因?yàn)閯Φ膫髡f,直到永恒。
總結(jié)
以上是生活随笔為你收集整理的Mecanim动画系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity3d 摄像机跟随鼠标和键盘的
- 下一篇: hadoop windows