![](/img/trans.png)
[英]How can I make an animation in Unity play just once and then switch back to another animation
[英]how to make animation wait for another animation in Unity
我是一個團結的新手,我才剛剛開始學習動畫和動畫師。 我正在制作一個簡單的游戲,玩家可以走路(當時正在播放步行動畫)或命中(當時正在播放攻擊動畫)也可以跳躍(播放跳躍動畫)。 否則,播放器處於空閑狀態(正在播放空閑動畫)。 問題是,當我嘗試命中時,它沒有命中(可以看到動畫師開始播放命中動畫,然后開始空閑動畫)。 我的觀點是,渲染一幀后,將調用“另一個更新”,因此即使攻擊尚未結束,也會播放空閑動畫。 我的代碼如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KnightController : MonoBehaviour {
private Rigidbody2D _rigidBody;
private Animator _animator;
private bool _isGrounded;
private bool _isJumped;
private bool _isAttacking;
void Start () {
_rigidBody = GetComponent<Rigidbody2D>();
_animator = GetComponent<Animator>();
_isGrounded = true;
_isJumped = false;
_isAttacking = false;
}
// Update is called once per frame
void Update () {
float walkSpeed = Input.GetAxis("Horizontal");
if (Mathf.Abs(walkSpeed) > float.Epsilon && _isGrounded)
{
Vector2 oldVelocity = _rigidBody.velocity;
_rigidBody.velocity = new Vector2(walkSpeed * 3, oldVelocity.y);
transform.localScale = new Vector2(Mathf.Sign(walkSpeed), transform.localScale.y);
_animator.Play("KnightWalk");
}
if (Input.GetKey(KeyCode.W))
{
_isJumped = true;
}
if (Mathf.Abs(walkSpeed) <= float.Epsilon && _isGrounded && !_isAttacking)
{
// _animator.Play("KnightIdle");
}
if (Input.GetMouseButtonDown(0))
{
_animator.Play("KnighAttack");
}
}
private void FixedUpdate()
{
if (_isJumped)
{
if (_isGrounded)
{
_rigidBody.AddForce(new Vector2(0, 160));
_animator.Play("KnightJump");
}
_isJumped = false;
}
}
private void OnCollisionStay2D(Collision2D collision)
{
_isGrounded = true;
}
private void OnCollisionExit2D(Collision2D collision)
{
_isGrounded = false;
}
}
關於如何解決它的任何建議? 如果我做錯了,請隨時告訴我。
是的,您做錯了。 您的假設是正確的,因此您必須使用Animator.Play()方法來強制播放動畫。 您應該使用動畫師控制器的狀態,條件和轉換。 看看這個: https : //docs.unity3d.com/Manual/class-AnimatorController.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.