我创建了一个名为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;
}
}
}
1 回答
首先,你在两种方法之间混合 . 您正在从代码中播放动画,并在动画师中分配tras.ition . 他们会发生冲突 . 您可以从代码执行整个动画控制,也可以按照以下步骤操作:1 . 使用过渡在动画制作窗口中创建一个有限状态机 . 2.向这些转换添加参数(bool,int等)3 . 从anim.SetBool(“walk”,true)等代码更改参数值以控制动画 .
另外,不要忘记将idle或walk动画的wrap模式设置为循环 . 否则,他们会玩一次然后停止 .