Unity通過(guò)BlendShape實(shí)現(xiàn)面部表情過(guò)渡切換Animation教程
一、前言
點(diǎn)關(guān)注不迷路,持續(xù)輸出Unity干貨文章。
嗨,大家好,我是新發(fā)。
在Unity項(xiàng)目中,我們可能需要實(shí)現(xiàn)3D角色表情的過(guò)渡切換,比如像這樣子:


在Unity中如何做這個(gè)功能呢?今天就來(lái)跟大家講一下。
二、BlendShape(動(dòng)畫(huà)師、MAYA)
在Maya中,動(dòng)畫(huà)師可以使用BlendShape綁定好表情,動(dòng)畫(huà)師只需要制作好A表情、B表情、C表情等,通過(guò)BlendShape就可以很方便地進(jìn)行表情之間的插值過(guò)渡了。
注意BlendShape與骨骼動(dòng)畫(huà)不同,骨骼動(dòng)畫(huà)需要先將網(wǎng)格綁定骨骼,由骨骼來(lái)驅(qū)動(dòng)網(wǎng)格;而BlendShape不需要骨骼,BlendShape很適合用作面部表情的實(shí)現(xiàn)。
動(dòng)畫(huà)師做好BlendShape后,Unity客戶(hù)端程序員將模型導(dǎo)入Unity工程中,在Unity中勾選模型的Import BlendShapes。

這樣,在Unity中我們就可以通過(guò)BlendShape滑塊來(lái)調(diào)節(jié)表情的過(guò)渡啦。

效果如下:

三、Unity控制BlendShapes
上面我們是手動(dòng)調(diào)節(jié)BlendShape的滑塊,我們?nèi)绾瓮ㄟ^(guò)代碼來(lái)控制BlendShape呢?
有兩種方式:
- 1、直接通過(guò)
SkinnedMeshRenderer組件訪問(wèn)BlendShape;
- 2、制作成
Animation,在Animation中控制BlendShape,然后由代碼來(lái)控制Animation。
1、SkinnedMeshRenderer控制BlendShape
接口:
// SkinnedMeshRenderer.cs public void SetBlendShapeWeight(int index, float value);
參數(shù)index就是BlendShape的索引,從0開(kāi)始,參數(shù)value是滑塊的值,范圍:0~100。

2、Animation控制BlendShape
動(dòng)畫(huà)師將表情制作成Animation,特定組合的BlendShape其實(shí)就是一個(gè)表情,比如眉毛上抬,眼睛睜大,嘴巴張開(kāi)這三個(gè)組合起來(lái)是一個(gè)表情,這樣做成n個(gè)Animation動(dòng)畫(huà)。

把這些動(dòng)畫(huà)組織到Animator狀態(tài)機(jī)中。

關(guān)于Animator的使用,可以參見(jiàn)我之前寫(xiě)的這篇文章:關(guān)于Unity動(dòng)畫(huà)狀態(tài)機(jī)Animator使用教程
接著,我們就可以通過(guò)播放動(dòng)畫(huà)來(lái)實(shí)現(xiàn)表情的過(guò)渡了。
// Animator.cs public void CrossFade(string stateName, float normalizedTransitionDuration);
參數(shù)stateName是動(dòng)畫(huà)狀態(tài)名稱(chēng),比如smile,參數(shù)normalizedTransitionDuration是動(dòng)畫(huà)融合歸一化時(shí)間。
我們可以測(cè)試下normalizedTransitionDuration分別為0、0.3f、1三種情況的融合效果:
為0的情況:

為0.3f的情況:

為1的情況:

四、結(jié)束語(yǔ)
好了。
喜歡Unity的同學(xué),不要忘記點(diǎn)擊關(guān)注,如果有什么Unity相關(guān)的技術(shù)難題,也歡迎留言或私信~
感謝閱讀,我們下次再見(jiàn)。

以上就是Unity通過(guò)BlendShape實(shí)現(xiàn)面部表情過(guò)渡切換Animation教程的詳細(xì)內(nèi)容,更多關(guān)于Unity通過(guò)BlendShape實(shí)現(xiàn)面部表情過(guò)渡切換Animation的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
VSCode如何遠(yuǎn)程連接Linux教程(密鑰的使用)
本文主要介紹了VSCode如何遠(yuǎn)程連接Linux教程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
知識(shí)蒸餾聯(lián)邦學(xué)習(xí)的個(gè)性化技術(shù)綜述
這篇文章主要為大家介紹了知識(shí)蒸餾聯(lián)邦學(xué)習(xí)的個(gè)性化技術(shù)綜述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
vscode使用editorconfig插件以及.editorconfig配置文件說(shuō)明詳解
這篇文章主要介紹了vscode使用editorconfig插件以及.editorconfig配置文件說(shuō)明詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討...2007-03-03
ASCII碼對(duì)照表以及各個(gè)字符的解釋(精華版)
ASCII(American Standard Code for Information Interchange,美國(guó)信息互換標(biāo)準(zhǔn)代碼)是一套基于拉丁字母的字符編碼,共收錄了 128 個(gè)字符,用一個(gè)字節(jié)就可以存儲(chǔ),它等同于國(guó)際標(biāo)準(zhǔn) ISO/IEC 6462020-03-03
對(duì)Web開(kāi)發(fā)人員有用的8個(gè)網(wǎng)站小結(jié)
本文是由比利時(shí)的Web開(kāi)發(fā)人員Jean-Baptiste Jung分享的,Jung還在《Web開(kāi)發(fā)/設(shè)計(jì)人員應(yīng)當(dāng)知道的15個(gè)網(wǎng)站》這篇文章中推薦了15個(gè)相關(guān)網(wǎng)站2011-05-05

