0

在我的游戏中,我想检查动画师中的一个状态是否已完成,然后手动触发另一个状态,但我无法检查。任何我出错的建议,这是我这样做的代码,此代码在更新函数中(参数'for_fire'和状态名称'Standing fire 3'对于一个状态是相同的):

counter_anim++;
if (counter_anim >= 5) 
{
    counter_anim = 0;
        float distance = Vector3.Distance (this.transform.position, new_target_points);
        if (distance <= 1.0f && !enter_state) 
        {
            navmesh.Stop ();
            anim.SetBool ("is_Firing", false);
            anim.SetBool ("for_fire", true);

            print ("i come here   "+this.anim.GetCurrentAnimatorStateInfo (0).IsName ("Standing fire 3"));

            if (this.anim.GetCurrentAnimatorStateInfo (0).IsName ("Standing fire 3") == true) 
            {
                enter_state = true;  // this bool variable is not getting true
            }
        }
}
//print (enter_state+"     "+ this.anim.GetCurrentAnimatorStateInfo (0).IsName ("Standing fire 3"));

if (enter_state && this.anim.GetCurrentAnimatorStateInfo (0).IsName ("Standing fire 3")==false) 
{
    //print (this.gameObject.GetComponent<Animator> ().GetCurrentAnimatorStateInfo (0).IsName ("Standing fire 3"));

    anim.SetBool ("for_fire",false);
    anim.SetBool ("new_pos",true);
    fire_occured ();
}

我正在制作,敌人走到他的位置并站立一会儿并开火,然后这个动画停止并且下一个动画开始。

4

1 回答 1

1

复制自评论:

尽管我已经看到了一些使用 IsName() 方法的实现,但我通常会使用标记 if(this.anim.GetCurrentAnimatorStateInfo(0).IsTag("Standing fire 3"))。这绝对对我有用。在 Animator 中,用它来标记你的状态。

我的猜测是名称约定不起作用。也许你拼错了,或者你使用的是剪辑的名称而不是状态。

于 2016-10-21T11:15:58.580 回答