動(dòng)畫狀態(tài)轉(zhuǎn)換
第一種方法是設(shè)置一個(gè)中間狀態(tài),從中間狀態(tài)向其余各種狀態(tài)切換,且各狀態(tài)向其他狀態(tài)需要設(shè)置參數(shù)
實(shí)現(xiàn)動(dòng)作轉(zhuǎn)移時(shí)右鍵點(diǎn)擊Make Transition即可?
實(shí)現(xiàn)動(dòng)畫轉(zhuǎn)移需要設(shè)置條件
點(diǎn)擊一種動(dòng)畫到另一種動(dòng)畫的線 ,然后點(diǎn)擊加號(hào)添加Condition 比如機(jī)器人從向左走切換到向右走的條件是MoveX(向左的運(yùn)動(dòng)參數(shù))大于0?
同時(shí),為了使得動(dòng)畫切換流暢 ,需要將Has Exit Time取消勾選?
同時(shí)點(diǎn)擊Settings,將Transation Duration(轉(zhuǎn)移間隔)設(shè)置為0
其他的動(dòng)畫切換也是這樣進(jìn)行
?
?代碼支持
direction是角色的朝向,我將direction的數(shù)值設(shè)置為1或-1
這個(gè)根據(jù)自己的需要來(lái)做
animator.SetFloat("MoveX",direction);
animator.SetFloat("MoveY",direction);
?混合樹(shù)
混合樹(shù)是更為簡(jiǎn)單的一種方法
在Animations 文件夾中選定為robot創(chuàng)建Animation Controller后,點(diǎn)擊進(jìn)入
?右鍵點(diǎn)擊From New Blend Tree 創(chuàng)建混合樹(shù)
?添加參數(shù)并為混合樹(shù)配置參數(shù)
?點(diǎn)擊右下角加號(hào)創(chuàng)建出運(yùn)動(dòng)? ?有幾個(gè)運(yùn)動(dòng)狀態(tài)就添加幾個(gè)運(yùn)動(dòng) 然后設(shè)置好這些運(yùn)動(dòng)對(duì)于X方向和Y方向的改變(通過(guò)Pos X和Pos Y設(shè)置 )
?然后將預(yù)先準(zhǔn)備好的動(dòng)畫拖動(dòng)到Motion中(根據(jù)參數(shù)確定每個(gè)Motion對(duì)應(yīng)的動(dòng)畫)
代碼支持
private void PlayMoveAnimation()
{
if (vertical)//垂直軸向動(dòng)畫的控制
{
animator.SetFloat("MoveX",0);
animator.SetFloat("MoveY",direction);
}
else//水平軸向動(dòng)畫的控制
{
animator.SetFloat("MoveY",direction);
animator.SetFloat("MoveY",0);
}
}
void Start()
{
Rigidbody2D1 = GetComponent<Rigidbody2D>();
timer = changeTime;
animator = GetComponent<Animator>();
// animator.SetFloat("MoveX",direction);
// animator.SetFloat("MoveY",direction);
PlayMoveAnimation();
isBroken = true;
}
private void Update()
{
//修復(fù)好讓機(jī)器人停止移動(dòng)
if (!isBroken)
{
return;
}
timer -= Time.deltaTime;
if (timer < 0)
{
direction = -direction;
PlayMoveAnimation();
timer = changeTime;
}
}
void FixedUpdate()
{
Vector2 position = Rigidbody2D1.position;
if (vertical)//垂直移動(dòng)
{
position.y += Time.deltaTime * speed*direction;
animator.SetFloat("MoveX",0);
animator.SetFloat("MoveY",direction);
}
else//水平移動(dòng)
{
position.x += Time.deltaTime * speed*direction;
animator.SetFloat("MoveX",direction);
animator.SetFloat("MoveY",0);
}
//將終點(diǎn)告知?jiǎng)傮w組件,讓剛體組件來(lái)進(jìn)行位移
Rigidbody2D1.MovePosition(position);
}
1、FixedUpdate()
? ? 固定更新方法,和物理相關(guān)的操作代碼,都要寫在此方法中。
? ? 固定更新的時(shí)間是0.02s,1秒執(zhí)行50次,可在Edit--->Project Settings--->Time面板中的Fixed Timestep查看。
2、Update()
? ? 每幀執(zhí)行一次。
? ? 畫面每渲染一次,就是一幀,每幀的時(shí)間是不固定的。
————————————————
版權(quán)聲明:本文為CSDN博主「_Wyhon」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hang981601026/article/details/79640678
? 為角色配置動(dòng)畫
將設(shè)置好的動(dòng)畫控制器拖動(dòng)到角色的Animator中的Controller即配置完成文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-616956.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-616956.html
到了這里,關(guān)于【Unity2D】角色動(dòng)畫的切換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!