Unity4.X中添加的新的動畫系統(tǒng)取代了原來3.X的舊的動畫系統(tǒng),新動畫系統(tǒng)Mecanim也是官方推薦的,使得我們寫較少的代碼來實(shí)現(xiàn)連續(xù)的動畫效果。
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的青州網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!使用播放play()或淡入淡出播放CrossFade()
例如:
animation.Play("name");
animation.CrossFade("name");
也可以做成隊(duì)列動畫,然后播放,例如:
animation.PlayQueued("name");
animation.CrossFade("name1");
代碼實(shí)現(xiàn)倒序播放
animation.Play(clip1);
animation[clip1].speed = animationspeed * -1.0;
老的動畫系統(tǒng)要實(shí)現(xiàn)一個(gè)連續(xù)的隊(duì)列動畫,是要通過代碼來進(jìn)行邏輯控制,而在新的動畫系統(tǒng)中,要實(shí)現(xiàn)這一功能將非常方便。例如要根據(jù)玩家連續(xù)點(diǎn)擊按鈕的次數(shù)來實(shí)現(xiàn)一系列動作的組合動畫。
例如:
站立動畫->***1。。。***N->站立動畫
這之間可以有N個(gè)連續(xù)動畫的組合,可以根據(jù)用戶點(diǎn)擊按鈕的頻率來判斷執(zhí)行到第幾個(gè)連續(xù)的動畫。
如圖,一般導(dǎo)入的動畫模型都是原始模型沒有動畫,然后是動畫模型,每一個(gè)動畫模型都依賴原始模型,命名后面+@name,對應(yīng)的狀態(tài)動畫。
unity4.X版本還保留了原始動畫系統(tǒng),將模型拖放到Hierarchy視圖中沒有Animation組件而是Animator組件。如果你還想用老的動畫系統(tǒng),就要切換動畫的類型Rig->Animation Type->Legacy
如果我們要讓模型改成新動畫系統(tǒng)的類型,我們最好用工具,讓程序來批量改變模型的類型,建議放在Editor下。
using UnityEditor;
public class MyEditor : AssetPostprocessor {
public void OnPreprocessModel()
{
ModelImporter modelImporter = (ModelImporter)assetImporter;
modelImporter.animationType = ModelImporterAnimationType.Human;
}
}
然后將模型拖放Project下,會發(fā)現(xiàn)模型的類型會自動修改成Humanoid格式,這種格式一般是人物模型選擇該格式。
創(chuàng)建模型的匹配骨骼文件,點(diǎn)擊Configure可以預(yù)覽骨骼。
節(jié)約資源起見,其他模型就由這個(gè)avatar copy一下即可。
Project->Create->AnimatiorController,然后講模型的Animator下的Controller屬性賦值這個(gè)動畫控制器
然后打開菜單欄的Window->Animator,將動畫文件拖放到Animator中,***箭頭代表根動畫,右擊選擇Set As Default可以設(shè)置為根動畫,選擇Make Transition可以連接下一個(gè)動畫節(jié)點(diǎn)。
每一條連接線都是一個(gè)狀態(tài),可以通過左下角的Parameters面板添加Bool變量來控制連接線是否連通,從而來改變模型的動畫。
設(shè)置連接線的連通條件,點(diǎn)擊某一條線,然后在Inspector->Conditions選擇Parameters里面的Bool值,并且設(shè)置它的默認(rèn)連通狀態(tài)是ture還是false。
代碼實(shí)現(xiàn)人物從等到狀態(tài)、跑步狀態(tài)、行走狀態(tài)的兩兩狀態(tài)切換:
using UnityEngine;
using System.Collections;
//Created By Aladdin http://blog.csdn.net/dingxiaowei2013/article/details/36911203
public class AladdinScript : MonoBehaviour {
public Transform transform;
//GUILabel
public GUIContent[] GUIContents;
//動畫控制器
private Animator animator;
//當(dāng)前狀態(tài)
private string currentState = "";
//獲取動畫控制器
void Start () {
animator = transform.GetComponent
}
void OnGUI()
{
GUILayout.BeginVertical("box");
for(int i = 0;i { //如果點(diǎn)擊了某個(gè)狀態(tài)的按鈕 if (GUILayout.Button(GUIContents[i])) { currentState = GUIContents[i].text; } AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); //從Wait->Walk if (stateInfo.IsName("Base Layer.wait") && currentState.Equals("Walk")) { animator.SetBool("WaitToWalk", true); } //從Walk->Wait else if (stateInfo.IsName("Base Layer.walk") && currentState.Equals("Wait")) { animator.SetBool("WaitToWalk", false); } //從Wait->Run else if (stateInfo.IsName("Base Layer.wait") && currentState.Equals("Run")) { animator.SetBool("WaitToRun", true); } //從Run->Wait else if (stateInfo.IsName("Base Layer.run") && currentState.Equals("Wait")) { animator.SetBool("WaitToRun", false); } //從Walk->Run else if (stateInfo.IsName("Base Layer.walk") && currentState.Equals("Run")) { animator.SetBool("WalkToRun", true); } //從Run->Walk else if (stateInfo.IsName("Base Layer.run") && currentState.Equals("Walk")) { animator.SetBool("WalkToRun", false); } } } } 運(yùn)行效果圖如上圖所示。 歡迎關(guān)注我的微博 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。點(diǎn)擊下載工程
文章名稱:[Unity3D]Unity4新的動畫系統(tǒng)Mecanim-創(chuàng)新互聯(lián)
鏈接地址:http://weahome.cn/article/cspgpi.html