Animationのsettriggerについてメモ

settrigger、意外とめんどくさかかったのでメモ。

たしかにググっても「知らないとハマる」とか色々書かれてたし、実際ハマった。

 

内部でtrueとfalseを持っていて、実行するとtrueになったあと自動でfalseになる。

このためsettriggerが完了するまで待ってあげないといけない。

 

完了するまえにanimatorを無効にすると

次にanimatorを有効にしたときに前回のtriggerが残っていて暴発する。

 

settrigger設定してるのになんか挙動がおかしいと思ったらUnityの実行順を確認する。

https://docs.unity3d.com/Manual/ExecutionOrder.html

 

 

settriggerに関わるのはOnAnimatorMoveの部分

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAnimatorMove.html

完了時にトリガーをリセットするなどの処理をいれてみるといいかもしれない。

void OnAnimatorMove() {
    var animator = GetComponent<Animator>();
    animator.ResetTrigger("trrigerName");
}

 

1フレーム待つとき

参考:https://hacchi-man.hatenablog.com/entry/2020/02/18/013000

private IEnumerator WaitAnimationImpl(){
        var animator = gameObject.GetComponent<Animator>();
        
        yield return null;
        
        var state = animator.GetCurrentAnimatorStateInfo(0);
        
        yield return new WaitWhile(() => state.IsName("animationステート名"));
}

 

 

もしくはコルーチンで強制的に飛ばしちゃうとか

参考:http://halcyonsystemblog.jp/blog-entry-659.html

private IEnumerator SkipAnimation(){
        var animator = GetComponent<Animator>();
        animator.SetTrigger("trrigerName");
        // Animatorのステート変更に1フレームかかるので待つ
        yield return new WaitForEndOfFrame();
        // アニメーションの最後にする
        animator.Play(animator.GetCurrentAnimatorStateInfo(0).fullPathHash, 0, 1);
}

 

参考になれば。

 

関連記事




コメントを残す

※コメントは承認後に表示されます。
 コメントを公開されたくない場合、名前の後に「:非公開」とつけてください。