Unity動(dòng)畫混合樹實(shí)例詳解
本文實(shí)例為大家分享了Unity動(dòng)畫混合樹實(shí)例代碼,供大家參考,具體內(nèi)容如下
先看效果
游戲動(dòng)畫中的一項(xiàng)常見任務(wù)是在兩個(gè)或更多相似運(yùn)動(dòng)之間進(jìn)行混合。也許最熟知的示例就是根據(jù)角色的速度來混合行走和奔跑動(dòng)畫。另一個(gè)示例是角色在奔跑期間轉(zhuǎn)向時(shí)向左或向右傾斜。
使用方法:
1.右鍵單擊 Animator Controller 窗口上的空白區(qū)域。 1.從顯示的上下文菜單中,選擇 Create State > From New Blend Tree。 1.雙擊混合樹 (Blend Tree) 以進(jìn)入混合樹視圖 (Blend Tree Graph)。
Animator 窗口現(xiàn)在顯示整個(gè)混合樹的圖示,而 Inspector 顯示當(dāng)前選定節(jié)點(diǎn)及其直接子節(jié)點(diǎn)。
類型
1. 1D:一維的混合,一個(gè)參數(shù)控制動(dòng)畫的切換。
2. 2D Simple Directional(2D簡(jiǎn)單方向):當(dāng)你的運(yùn)動(dòng)代表不同的方向,如“向前走”,“向后走”,“向左走”,“向右走”,或“向上瞄準(zhǔn)”,“向下瞄準(zhǔn)”,“左瞄“和”右瞄“。當(dāng)然了,可以在(0,0)處包含一個(gè)默認(rèn)動(dòng)作類似“空閑站立”或“直線瞄準(zhǔn)”。與1D混合樹不同的是,2D Simple Directional 不是在同一個(gè)方向上的多個(gè)動(dòng)作,比如“走”和“跑”。
3. 2D Freeform Directional(2D自由方向):動(dòng)畫運(yùn)用有不同的方向時(shí),也可以使用這種混合類型:可以在同一個(gè)方向上有多個(gè)運(yùn)動(dòng),例如“走”和“跑”。在Freeform Directional類型中,(0,0)位置必須包含一個(gè)默認(rèn)動(dòng)作,如“空閑站立”。
4. 2D Freeform Cartesian(2D自由笛卡兒):當(dāng)混合的2個(gè)參數(shù)不代表不同的方向時(shí)使用。使用Freeform Cartesian,參數(shù)X和Y可以表示不同的概念類型,例如角速度和線速度。舉個(gè)例子:“向前走不轉(zhuǎn)向”,“向前跑不轉(zhuǎn)向”,“向前走并右轉(zhuǎn)”,“向前跑并右轉(zhuǎn)”等動(dòng)作。
如果角色動(dòng)畫包含站立、走、跑和轉(zhuǎn)向,非常符合2D Freeform Cartesian這種類型。我們的實(shí)例中就用的這個(gè)類型。
實(shí)例
實(shí)例中,我們用到了17個(gè)動(dòng)畫,包含,靜止?fàn)顟B(tài),前走后走左走右走4個(gè),左前走左后走右前走右后走4個(gè),同理跑也是8個(gè)動(dòng)畫。
使用Walk和Turn控制動(dòng)畫的播放,其中Walk為PosX軸,Turn為PosY軸,在三維世界中,分別代表人物的前后移動(dòng)和左右移動(dòng)。我們手動(dòng)輸入?yún)?shù),例如當(dāng)(-0.5,0)的時(shí)候代表向后走,(1,1)的時(shí)候代表想右前方跑。配置好混合樹以后就可以用代碼控制這些參數(shù)的變化從而播放相應(yīng)的動(dòng)畫。
代碼
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; public class RobotKyleController : MonoBehaviour { Animator m_Animator; private Vector3 m_Move; void Start() { m_Animator = GetComponent<Animator>(); } private void FixedUpdate() { float h = CrossPlatformInputManager.GetAxis("Horizontal"); float v = CrossPlatformInputManager.GetAxis("Vertical"); if (Input.GetKey(KeyCode.LeftShift)) { m_Move = v * Vector3.forward + h * Vector3.right; } else { m_Move =( v * Vector3.forward + h * Vector3.right)*0.5f; } UpdateAnimator(m_Move); } void UpdateAnimator(Vector3 move) { m_Animator.SetFloat("Walk", move.z, 0.1f, Time.deltaTime); m_Animator.SetFloat("Turn", move.x, 0.1f, Time.deltaTime); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查
SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù),在小型項(xiàng)目中,方便,易用,同時(shí)支持多種開發(fā)語(yǔ)言。本文將用C#語(yǔ)言對(duì)SQLite 的一個(gè)封裝,實(shí)現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下2022-01-01C#實(shí)現(xiàn)基于鏈表的內(nèi)存記事本實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)基于鏈表的內(nèi)存記事本,實(shí)例分析了C#基于鏈表實(shí)現(xiàn)的記事本功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07silverlight實(shí)現(xiàn)圖片局部放大效果的方法
這篇文章主要介紹了silverlight實(shí)現(xiàn)圖片局部放大效果的方法,結(jié)合實(shí)例形式分析了silverlight針對(duì)圖片屬性的相關(guān)操作技巧,需要的朋友可以參考下2017-03-03C#如何將查詢到的數(shù)據(jù)庫(kù)里面的數(shù)據(jù)輸出到textbox控件
這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫(kù)里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07