首页 文章

为角色创建新的动画控制器为什么角色不正确?

提问于
浏览
0

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

也未选中Apply Root Motion

然后将一个新脚本附加到称为脚本Soldier的第三人称角色 .

Animator Controller

然后我设置了动画师控制器,我添加了两个新的状态:Walk和Idle . HumanoidIdle和HumanoidWalk .

然后我这样做了默认的开始状态将是空闲 . 设置StateMachine默认状态 .

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

如果我删除了这个过渡并从空闲到步行转换然后当我按下W它会走路然后如果我离开W键并且它是空转然后在2-3秒之后角色将走在地方我的意思是它将动画走路没有移动,我没有按任何东西,它在空转时自动启动 .

角色有另一个动画师控制器,但我创建了一个新的动画师控制器,只使用了新的动画师控制器 .

Animator Controller.

和剧本:

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 回答

  • 1

    首先,你在两种方法之间混合 . 您正在从代码中播放动画,并在动画师中分配tras.ition . 他们会发生冲突 . 您可以从代码执行整个动画控制,也可以按照以下步骤操作:1 . 使用过渡在动画制作窗口中创建一个有限状态机 . 2.向这些转换添加参数(bool,int等)3 . 从anim.SetBool(“walk”,true)等代码更改参数值以控制动画 .

    另外,不要忘记将idle或walk动画的wrap模式设置为循环 . 否则,他们会玩一次然后停止 .

相关问题