是否有可能迫使动画师"结束任何动画并执行我想要的任何动画?

时间:2014-10-22 19:27:25

标签: unity3d

首先,请原谅我,如果我的问题太琐碎,那是因为我是Unity的新手,而且我在获取文档时遇到了一些困难。我想要的是将角色从一个位置移动到另一个位置进行动画行走。动画通过控制器动画" Animator"启动。问题是当我启动一个触发器来启动动画时,角色不会停止上一个动画来执行我要求的动画,这会导致失步:角色开始随着它当时的动画移动。我尝试了很多东西,但我找不到问题。 这可能是Animator: enter image description here

这是我的代码:

enum AnimTriger {IdleTrigger, SpawnTrigger, RunTrigger, AttackTrigger, DeadTrigger, VictoryTrigger };
public class CharacterController : MonoBehaviour {
    private GameObject target, origin;
    private bool isWalking = false;
    private bool isMele = false;
    private GameObject instigator;



    public void goAndAttack(GameObject instigator, GameObject target,GameObject origin, bool mele)
    {
        this.target = target;
        this.origin = origin;        
        this.instigator = instigator;
        isMele = mele;
        StartCoroutine(AttackAction());

    }

    private IEnumerator AttackAction()
    {
        Animator anim = instigator.GetComponent<Animator>();

        yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);        
        if (isMele)
        {
            anim.SetTrigger(AnimTriger.RunTrigger.ToString());
            yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
            isWalking = true;
            while (isWalking)
            {
                yield return new WaitForFixedUpdate();
            }
            yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);

        }

        anim.SetTrigger(AnimTriger.AttackTrigger.ToString());
        if (isMele)
        {
            anim.SetTrigger(AnimTriger.RunTrigger.ToString());
            target = origin;
            yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
            isWalking = true;
            while (isWalking)
            {
                yield return new WaitForFixedUpdate();
            }
            yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
        }
        anim.SetTrigger(AnimTriger.IdleTrigger.ToString());

    }

    void Update () {
        if (isWalking && isMele)
        {
            instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f);
            isWalking = instigator.transform.position != target.transform.position;
        }


    }


}

是否可以强制使用&#34; Animator&#34;结束任何动画并执行我想要的任何动画?
在此先感谢您提供有关此问题的任何帮助

2 个答案:

答案 0 :(得分:2)

答案很简单,只需取消选中“原子”复选框,就可以打破动画 enter image description here

答案 1 :(得分:0)

bi y完成发布问题的时间我找到了一个固定的。我添加了可能UpDate功能的另一个条件:

    void Update () {
    if (isWalking && isMele && instigator.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("Basic Layer.Run"))
    {
        instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f);
        isWalking = instigator.transform.position != target.transform.position;
    }

但这不是我想要的。