首页 > 解决方案 > 为什么动画不适用于此 2D 统一角色控制器脚本

问题描述

我有一些代码可以让玩家上下左右移动。

public class playerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public Rigidbody2D rb;
    public Animator animator;
    public SpriteRenderer sr;

    Vector2 movement;
    bool walking = false;

    private void Update()
    {
        //Inputs
        movement.x = Input.GetAxisRaw("Horizontal");
        movement.y = Input.GetAxisRaw("Vertical");

        if (Input.GetKey("left") || Input.GetKey("right") || Input.GetKey("up") || Input.GetKey("down")
        {
            walking = true;
        }
        else
        {
            walking = false;
        }

        Animate();
    }

    private void Animate()
    {
        if (Input.GetKey("down") && walking == false)
        {
            sr.flipX = false;
            animator.Play("idle_front");
        }
        else if (Input.GetKey("down") && walking)
        {
            sr.flipX = false;
            animator.Play("walk_front");
        }
        else if (Input.GetKey("up") && walking == false)
        {
            sr.flipX = false;
            animator.Play("idle_back");
        }
        else if (Input.GetKey("down") && walking)
        {
            sr.flipX = false;
            animator.Play("walk_back");
        }
        else if (Input.GetKey("left") && walking == false)
        {
            sr.flipX = false;
            animator.Play("idle_side");
        }
        else if (Input.GetKey("down") && walking)
        {
            sr.flipX = false;
            animator.Play("walk_side");
        }
        else if (Input.GetKey("right") && walking == false)
        {
            sr.flipX = true;
            animator.Play("idle_side");
        }
        else if (Input.GetKey("right") && walking)
        {
            sr.flipX = true;
            animator.Play("walk_side");
        }

    }

    public void FixedUpdate()
    {
        //Movement
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
    }
}

动作运行良好,但角色只是停留在空闲状态。我曾尝试将 get 键切换Input.GetKey("left") || Input.GetKey("right") || Input.GetKey("up") || Input.GetKey("down")Input.GetKeyDown()and Input.GetKeyUp(),但这些都不起作用。

我也尝试过使用混合树,但我不知道该怎么做。

我对 Unity 还很陌生,所以一个简单的答案会很棒。

标签: c#unity3danimation

解决方案


打开动画窗口

创建“状态”

将动画剪辑设置为“运动”

在左上角单击“参数”选项卡

点击参数旁边的加号

点击“触发器”

命名你的触发器

右键单击“任何状态”并转换以将一条线拖动到您创建的新“状态”

单击“任何州”和您创建的“州”之间的线

在“条件”下按加号并添加您刚刚创建的触发器

在代码中写

animator.SetTrigger("triggername");

当您想为所有动画转换到前面提到的动画状态重复时,请从“任何状态”链接它们


推荐阅读