簡體   English   中英

如何使動畫在Unity中等待另一個動畫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM