Unity3D中角色的動畫腳本的編寫(三)
來源: 瀏覽數(shù):
責任編輯:wyb314 時間:2012-11-16 11:00
責任編輯:wyb314 時間:2012-11-16 11:00
[導讀]
在上一篇,我們具體的講解了有關動畫的融合,也提到了有關動畫狀態(tài)的權重問題。那么這次,我來以一個例子的形式來向大家講解動畫的疊加,或許會涉及到多方面的知識,我力求一次講清。好了,我們開始吧!
首先我們必須新建一個工程,我取名為:AnimaitonTestTuriol。我們需要一個模型,這里我剛好從從官方的
CharacterAnimation這個工程中摳出了一個:Soldier。然后我將其導入到了次工程文件夾下面的,然后簡單的錯了一個場景,取名為:AnimationAdditive,下圖就是我們的工程預覽:



我們試著調(diào)節(jié)一下Game視圖中的垂直滾動條,可以發(fā)現(xiàn),動畫的效果改變了:

我想讀者一定按捺不住現(xiàn)在的心情了。我們成功的將左傾動畫與跑步動畫給疊加起來了,雖然例子很簡單,但是我想我們應該可以疊加更多的動畫了。希望讀者能夠認真體會。還有一點,官方CharacterAnimation工程中的第四個場景中的代碼完整的展現(xiàn)了動畫疊加的精髓,我的這個Solider就是從這個場景中摳出來的,感興趣的讀者不妨分析一下里面的代碼,保證獲益頗豐。如對本篇難以理解的不讓留個言,或者加qq:1597725465,本人一定親囊相受。下一篇,我準備介紹一下“動畫混合”,他是可以將某個動畫片段加到角色的某個部位的,非常神奇,但也有一些限制因素。敬請期待我的下一篇文章!

然后我們新建一個名為CustomScripts的文件夾,用于存放我們接下來要建立的腳本文件。
我們此次的目的是要能夠在腳本中熟練運用動畫的疊加方法。那么什么是動畫的疊加呢?所謂動畫的疊加,就是指我們可以在任意動畫上面來疊加動畫效果。這就非常棒了,因為這項功能可以削減美術為游戲角色創(chuàng)建的動畫片段的數(shù)量,既減小了工程所占用空間的大小,又對簡化了我們的代碼編寫。官方舉了一個例子,大體上是這樣的:加入我們有一個角色,具備基本的“站立”,“跑步”,“左傾”,“右傾”的動畫,我們還想讓其在跑步圖中轉身時有一種傾斜的效果,比如左轉彎時不只是播放跑步的動畫,而且還疊加了一個左傾的(或者右傾的)動畫。如果我們不用疊加,那么我們勢必會多創(chuàng)建兩個動畫效果:“跑步時左傾”,“跑步時右傾”。一旦有了動畫的疊加,我們根本就不需要去做這兩個動畫片段,厲害吧!那么我們該怎么去實現(xiàn)這個呢?
我們首先要知道怎么去疊加動畫,為此,我們必須了解一下這個屬性:AnimationState.blendMode,即混合模式。此屬性的返回值類型為AnimationBlendMode ,我們看文檔:

這里只有兩個變量:Blend和Additive。在默認狀態(tài)下,Animation組件所管理的每個動畫狀態(tài)的混合模式都是:
AnimationBlendMode.Blend,即融合模式,我們只有在程序中才能對其進行相應的修改。如果你將此動畫模式修改成了Additive,那么你的這個動畫狀態(tài)就具備疊加到其他動畫上的功能了,此時你只需動態(tài)的調(diào)節(jié)這兩個動畫狀態(tài)之間的權重就可以產(chǎn)生相應的疊加動畫了。下面我來編寫一個試驗性的腳本來證明我們的猜想,我為這個腳本取名為:
AdditiveAnimaitonTest1,代碼如下:
using UnityEngine;
using System.Collections;
public class AdditiveAnimaitonTest1 : MonoBehaviour {
private AnimationState***n;
private AnimationState leanLeft;
void Start () {
animation.wrapMode = WrapMode.Loop;//聲明各動畫狀態(tài)的播放方式為循環(huán)模式
***n = animation["***nSlow"];//實例化成員變量
leanLeft = animation["leanLeft"];
if ***n)
{
***n.weight = 1f;//設定動畫狀***n的混合權重為1
***n.layer = 10;//讓這個動畫狀態(tài)的layer為最高層10
***n.enabled = ***e;//啟用此動畫狀態(tài)
}
if (leanLeft)
{
leanLeft.weight = 1f;
leanLeft.layer = 10;//讓此動畫狀態(tài)***n為同一層,又由于此動畫狀體的混合權重也為1,那么其獲得動畫混合權重的幾率***n一樣
leanLeft.enabled = ***e;//啟用此動畫狀態(tài)
leanLeft.blendMode = AnimationBlendMode.Additive;//將此動畫狀態(tài)設定為疊加模式
}
}
void OnGUI()
{
GUILayout.BeginHorizontal();//利用拖動條來控制每種動畫狀體的權重
***n.weight = GUILayout.VerticalSlider***n.weight,1.0f,0.0f);
leanLeft.weight = GUILayout.VerticalSlider(leanLeft.weight, 1.0f, 0.0f);
GUILayout.EndHorizontal();
}
}
上面的代碼比較少,可是里面所涉及到的內(nèi)容卻并不那么容易理解。因為這次我們不是靠明顯代碼來播放動畫,而是依靠調(diào)節(jié)權重來實現(xiàn)的。為了理解這個方法的原理,我們必須明白一個結論:假如一個動畫狀態(tài)被激活了,例如:animation["idle"].enable = ***e ,那么此動畫就會處于播放狀態(tài)(此時沒有執(zhí)行類似:
animation.Play或者animation.CrossFade之類的語句)。不信的話你可以在上面的Start()函數(shù)中寫下以下語句:
if(animation.IsPlaying("idle")){
Debug.Log("idle is***nning!");
}
if(animation.IsPlaying("leanLeft ")){
Debug.Log(" leanLeft is***nning!");
}
我相信第二個if語句中的Debug會被打印出來,而第一個則不會,不信你試試。
好了,我們運行一下游戲吧!

我們試著調(diào)節(jié)一下Game視圖中的垂直滾動條,可以發(fā)現(xiàn),動畫的效果改變了:

我想讀者一定按捺不住現(xiàn)在的心情了。我們成功的將左傾動畫與跑步動畫給疊加起來了,雖然例子很簡單,但是我想我們應該可以疊加更多的動畫了。希望讀者能夠認真體會。還有一點,官方CharacterAnimation工程中的第四個場景中的代碼完整的展現(xiàn)了動畫疊加的精髓,我的這個Solider就是從這個場景中摳出來的,感興趣的讀者不妨分析一下里面的代碼,保證獲益頗豐。如對本篇難以理解的不讓留個言,或者加qq:1597725465,本人一定親囊相受。下一篇,我準備介紹一下“動畫混合”,他是可以將某個動畫片段加到角色的某個部位的,非常神奇,但也有一些限制因素。敬請期待我的下一篇文章!
免責聲明:本文僅代表作者個人觀點,與納金網(wǎng)無關。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內(nèi)容。
- 分享到:
相關閱讀
- 有巨蟹座男朋友的女2017年06月21日
- 高校人才引進看重“2016年08月23日
- 視覺設計該如何賦予2016年08月23日
- 如何創(chuàng)造設計經(jīng)典2016年08月23日
- MLikeasong答互聯(lián)網(wǎng)軟件2016年08月19日
- 工業(yè)設計創(chuàng)業(yè)的誤區(qū)2016年08月18日
- 2016年北京理工大學工2015年08月10日
- 中國一線城市近8成白2015年08月04日
- 2010宅男腐女們的杯洗2015年08月04日
- 深圳長途搬家公司包2013年03月22日
精采專題
熱門文章
最新文章