中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Unity3D]Unity4新的動畫系統Mecanim

發布時間:2020-03-03 06:08:09 來源:網絡 閱讀:6654 作者:蓬萊仙羽 欄目:游戲開發

Unity4.X中添加的新的動畫系統取代了原來3.X的舊的動畫系統,新動畫系統Mecanim也是官方推薦的,使得我們寫較少的代碼來實現連續的動畫效果。

效果圖

[Unity3D]Unity4新的動畫系統Mecanim

Unity3.X中動畫系統播放動畫

使用播放play()或淡入淡出播放CrossFade()

例如:


animation.Play("name");

animation.CrossFade("name");

也可以做成隊列動畫,然后播放,例如:

animation.PlayQueued("name");

animation.CrossFade("name1");

代碼實現倒序播放

animation.Play(clip1); 

animation[clip1].speed = animationspeed * -1.0; 

老的動畫系統要實現一個連續的隊列動畫,是要通過代碼來進行邏輯控制,而在新的動畫系統中,要實現這一功能將非常方便。例如要根據玩家連續點擊按鈕的次數來實現一系列動作的組合動畫。


例如:

站立動畫->***1。。。***N->站立動畫

這之間可以有N個連續動畫的組合,可以根據用戶點擊按鈕的頻率來判斷執行到第幾個連續的動畫。

如圖,一般導入的動畫模型都是原始模型沒有動畫,然后是動畫模型,每一個動畫模型都依賴原始模型,命名后面+@name,對應的狀態動畫。

[Unity3D]Unity4新的動畫系統Mecanim

unity4.X版本還保留了原始動畫系統,將模型拖放到Hierarchy視圖中沒有Animation組件而是Animator組件。如果你還想用老的動畫系統,就要切換動畫的類型Rig->Animation Type->Legacy

[Unity3D]Unity4新的動畫系統Mecanim



Unity4.X中動畫系統播放動畫

如果我們要讓模型改成新動畫系統的類型,我們最好用工具,讓程序來批量改變模型的類型,建議放在Editor下。

using UnityEditor;


public class MyEditor : AssetPostprocessor {


public void OnPreprocessModel()

    {

        ModelImporter modelImporter = (ModelImporter)assetImporter;

        modelImporter.animationType = ModelImporterAnimationType.Human;

    }

}

然后將模型拖放Project下,會發現模型的類型會自動修改成Humanoid格式,這種格式一般是人物模型選擇該格式。

創建模型的匹配骨骼文件,點擊Configure可以預覽骨骼。

[Unity3D]Unity4新的動畫系統Mecanim

節約資源起見,其他模型就由這個avatar copy一下即可。

[Unity3D]Unity4新的動畫系統Mecanim


創建動畫控制器AnimatorController

Project->Create->AnimatiorController,然后講模型的Animator下的Controller屬性賦值這個動畫控制器

[Unity3D]Unity4新的動畫系統Mecanim

然后打開菜單欄的Window->Animator,將動畫文件拖放到Animator中,***箭頭代表根動畫,右擊選擇Set As Default可以設置為根動畫,選擇Make Transition可以連接下一個動畫節點。

每一條連接線都是一個狀態,可以通過左下角的Parameters面板添加Bool變量來控制連接線是否連通,從而來改變模型的動畫。

[Unity3D]Unity4新的動畫系統Mecanim

設置連接線的連通條件,點擊某一條線,然后在Inspector->Conditions選擇Parameters里面的Bool值,并且設置它的默認連通狀態是ture還是false。

[Unity3D]Unity4新的動畫系統Mecanim

代碼實現人物從等到狀態、跑步狀態、行走狀態的兩兩狀態切換:

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;

    //當前狀態

    private string currentState = "";


    //獲取動畫控制器

void Start () {

        animator = transform.GetComponent<Animator>();

}

void OnGUI()

    {

        GUILayout.BeginVertical("box");

        for(int i = 0;i<GUIContents.Length;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);

            }

        }

    }

}

運行效果圖如上圖所示。

歡迎關注我的微博  

點擊下載工程


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南城县| 义乌市| 大邑县| 遂溪县| 昆明市| 济源市| 贵溪市| 北辰区| 会宁县| 汨罗市| 塔河县| 重庆市| 清苑县| 延安市| 海兴县| 衡阳市| 两当县| 武穴市| 普格县| 百色市| 凤山县| 夏邑县| 红原县| 马山县| 新宁县| 金乡县| 礼泉县| 金川县| 闽侯县| 牡丹江市| 盐池县| 军事| 四川省| 张家口市| 五家渠市| 靖远县| 星子县| 江油市| 清远市| 铜陵市| 岗巴县|