我创建了一个名为SoldierController的新控制器,并将其拖动到Inspector中Animator组件下的角色Controller。
同样取消选中Apply Root Motion
然后将新脚本附加到称为脚本Soldier的第三人称角色。
然后我设置了动画师控制器,我添加了两个新状态:Walk和Idle。 HumanoidIdle和HumanoidWalk。
然后我这样做,默认的开始状态将是空闲。设置StateMachine默认状态。
然后我做了从步行到空闲的过渡。这样当我按下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;
}
}
}
答案 0 :(得分:1)
首先,您将两种方法混合使用。您正在从代码中播放动画,并在动画师中分配tras.ition。他们会发生冲突。您可以从代码执行整个动画控制,也可以按照以下步骤操作: 1.使用转换在动画制作器窗口中创建一个有限状态机。 2.为这些转换添加参数(bool,int等) 3.从anim.SetBool(“walk”,true)等代码更改参数值,以控制动画。
另外,不要忘记将idle或walk动画的wrap模式设置为循环。否则,他们会玩一次然后停止。