为什么在为角色创建新的动画控制器时角色不能正确行走?

Why when creating new animator controller for the character the character is not walking right?

我创建了一个名为 SoldierController 的新控制器,并将其拖到 Inspector 中 Animator 组件下的角色 Controller 中。

也取消选中应用根运动

然后在第三人称角色上附加了一个新脚本,称为脚本士兵。

然后我设置动画控制器我添加到它的两个新状态:步行和空闲。 HumanoidIdle 和 HumanoidWalk。

然后我做了默认启动状态将是空闲。设置状态机默认状态。

然后我做了一个从步行到空闲的过渡。这样当我按下 W 它开始走一点然后它继续移动角色但没有行走动画。

如果我删除此过渡并从空闲过渡到行走,那么当我按下 W 时它会行走,但如果我离开 W 键并且它处于空闲状态,那么在 2-3 秒后角色将在我的位置行走意味着它会在不移动的情况下动画行走,并且我不会按任何东西它在空闲时自动启动。

这个角色有另一个动画师控制器,但我创建了一个新控制器并且只使用了这个新控制器。

和脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Soldier : MonoBehaviour
{
    private bool _isWalking = false;
    private Animator anim;

    // Use this for initialization
    void Start ()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update ()
    {
        var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;

        transform.Rotate(0, x, 0);

        if (Input.GetKey("w"))
        {
            if (!_isWalking)
            {
                _isWalking = true;
                anim.Play("Walk");
            }
            var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
            transform.Translate(0, 0, z); // Only move when "w" is pressed.
        }
        else
        {
            if (_isWalking)
            {
                anim.Play("Idle");
            }
            _isWalking = false;
        }
    }
}

首先,您混合了两种方法。您正在播放代码中的动画,并在动画师中分配过渡。他们会发生冲突。您可以通过代码完成整个动画控制,也可以按照以下步骤操作: 1. 使用转换在动画器 window 中制作一个有限状态机。 2. 为这些转换添加参数(bool、int 等) 3. 改变代码anim.SetBool("walk", true) 中的参数值来控制动画。

另外,不要忘记将空闲或行走动画的环绕模式设置为循环。否则,他们将播放一次然后停止。