推薦閱讀
- CSDN主頁
- GitHub開源地址
- Unity3D插件分享
- 簡書地址
- 我的個人博客
大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。
一、前言
在日常開發(fā)中,常常會遇到要控制動畫的播放、暫停和倒放的情況。
這篇文章就總結(jié)一下,Animation
和Animator
動畫播放系統(tǒng)的控制播放、暫停、倒放
的代碼。
首先,來了解一下Animation
和Animator
的區(qū)別和聯(lián)系。
二、Animation和Animator的區(qū)別和聯(lián)系
2-1、Animation動畫播放器
Animation動畫播放器
,用來控制單一動畫的播放和停止,占用資源小。
屬性 | 簡介 |
---|---|
Animation | 當前播放的動畫 |
Animations | 所有可以播放的動畫片段,可以通過切換動畫片段來切換動畫 |
Play Automatically | 自動播放 |
Animate Physics | 動畫是否和物理世界進行交互(可以研究一下) |
Culling Type | 動畫在不可見時是否繼續(xù)播放,默認總是播放 |
2-2、Animator動畫狀態(tài)機
Animator動畫控制器
,用來控制多個動畫的播放、切換及疊加系列復(fù)雜的效果,動畫狀態(tài)機,占用資源大。
屬性 | 簡介 |
---|---|
Controller | 動畫控制器 |
Avatar | 物體的骨骼Avatar |
Apply Root Motion | 是否使用動畫本身來控制角色的位置(不然就是使用腳本來控制角色的位置) |
Update Mode | 動畫的更新模式,默認是同步更新,動畫速度與運行速度相匹配,運行速度慢,動畫慢 |
Culling Mode | 動畫在不可見時是否繼續(xù)播放,默認總是播放 |
2-3、區(qū)別與聯(lián)系
Animation組件和Animator組件的使用是非常相似的。
Animation組件用來控制單一動畫的播放控制,Animator控制多個動畫之間的切換,用了狀態(tài)機機制。
Animation占用資源少,Animator占用資源多。
Animator增加了骨骼Avatar,可以控制骨骼動畫:
三、Animation中控制動畫播放、暫停、倒放
3-1、播放動畫
根據(jù)動畫片段的名字播放動畫:
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
Animation ani;
void Start()
{
//播放動畫
ani.Play("Open");
}
}
設(shè)置動畫片段來播放動畫:
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
Animation ani;
public AnimationClip[] clips;
void Start()
{
//使用動畫片段來播放動畫
ani.clip = clips[0];
ani.Play();
}
}
將動畫片段拖進去:
AnimationClip:動畫剪輯片段,儲存基于關(guān)鍵幀的動畫,是用于Animation來播放動畫
3-2、暫停動畫
使用了三種方法
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
Animation ani;
Animator anir;
void Start()
{
// 播放動畫
ani.Play("Open");
// 暫停動畫
// 第一種方法:
ani.Stop();
// 第二種方法:
AnimationState animationState = ani["Open"];
animationState.speed = 0;
//第三種方法
Time.timeScale = 0;
}
}
3-3、倒放動畫
關(guān)鍵點在于設(shè)置AnimationState動畫狀態(tài)
播放速度為負值即可倒放,負多少無所謂:
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
Animation ani;
void Start()
{
// 倒放動畫
AnimationState animationState = ani["Open"];
animationState.speed = -1;//設(shè)置速度為負值即可
animationState.normalizedTime = 1;
ani.Play("Open");
}
}
AnimationState:動畫狀態(tài),用來改變單一動畫的播放速度、權(quán)重、時間、層級、播放Mode,以及混合模式
四、Animator中控制動畫播放、暫停、倒放
4-1、舊版Unity的API實現(xiàn)播放、暫停、倒放
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
public Animator ani;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
// 暫停動畫
ani.speed = 0;
}
if (Input.GetKeyDown(KeyCode.S))
{
// 倒播
// 現(xiàn)在speed設(shè)置為負數(shù)無效
ani.speed = -1;
}
if (Input.GetKeyDown(KeyCode.D))
{
// 播放動畫
ani.speed = 1;
}
}
}
目前,播放和暫停是有用的,但是倒放不管用。
接下來,看一下新版Unity如何實現(xiàn)Animator動畫的倒放吧。
4-2、新版Unity的API實現(xiàn)播放、暫停、倒放
第一種方法,復(fù)制一份動畫片段
代碼控制:
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
public Animator ani;
void Start()
{
// 正常播放
ani.Play("textAni");
// 倒放
ani.Play("textAni-1");
}
}
第二種方法,用狀態(tài)機控制
(1)新建變量float類型:
(2)命名為speed:
(3)勾選Parameter參數(shù)
(4)代碼控制
using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
{
public Animator ani;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
// 暫停動畫
ani.SetFloat("speed",0);
}
if (Input.GetKeyDown(KeyCode.S))
{
// 倒播
ani.SetFloat("speed", -1);
}
if (Input.GetKeyDown(KeyCode.D))
{
// 播放動畫
ani.SetFloat("speed", 1);
}
}
}
五、后記
本篇文章詳細講解了Animation
和Animator
組件的介紹和不同點。
已經(jīng)使用的方法。
然后介紹了Animation
和Animator
組件播放動畫的過程中的播放、倒播、暫停動畫的代碼分享。
當然,Animation
和Animator
組件的使用不僅僅就這些,更多的高端的使用方法,可以關(guān)注其他文章。
如果覺得本篇文章有用別忘了點個關(guān)注,關(guān)注不迷路,持續(xù)分享更多Unity干貨文章。
你的點贊就是對博主的支持,有問題記得留言:
博主主頁有聯(lián)系方式。文章來源:http://www.zghlxwxcb.cn/news/detail-433330.html
博主還有跟多寶藏文章等待你的發(fā)掘哦:文章來源地址http://www.zghlxwxcb.cn/news/detail-433330.html
專欄 | 方向 | 簡介 |
---|---|---|
Unity3D開發(fā)小游戲 | 小游戲開發(fā)教程 | 分享一些使用Unity3D引擎開發(fā)的小游戲,分享一些制作小游戲的教程。 |
Unity3D從入門到進階 | 入門 | 從自學(xué)Unity中獲取靈感,總結(jié)從零開始學(xué)習(xí)Unity的路線,有C#和Unity的知識。 |
Unity3D之UGUI | UGUI | Unity的UI系統(tǒng)UGUI全解析,從UGUI的基礎(chǔ)控件開始講起,然后將UGUI的原理,UGUI的使用全面教學(xué)。 |
Unity3D之讀取數(shù)據(jù) | 文件讀取 | 使用Unity3D讀取txt文檔、json文檔、xml文檔、csv文檔、Excel文檔。 |
Unity3D之數(shù)據(jù)集合 | 數(shù)據(jù)集合 | 數(shù)組集合:數(shù)組、List、字典、堆棧、鏈表等數(shù)據(jù)集合知識分享。 |
Unity3D之VR/AR(虛擬仿真)開發(fā) | 虛擬仿真 | 總結(jié)博主工作常見的虛擬仿真需求進行案例講解。 |
Unity3D之插件 | 插件 | 主要分享在Unity開發(fā)中用到的一些插件使用方法,插件介紹等 |
Unity3D之日常開發(fā) | 日常記錄 | 主要是博主日常開發(fā)中用到的,用到的方法技巧,開發(fā)思路,代碼分享等 |
Unity3D之日常BUG | 日常記錄 | 記錄在使用Unity3D編輯器開發(fā)項目過程中,遇到的BUG和坑,讓后來人可以有些參考。 |
到了這里,關(guān)于【Unity3D小技巧】Unity3D中Animation和Animator動畫的播放、暫停、倒放控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!