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);
}
参考になれば。
 
			
※コメントは承認後に表示されます。
コメントを公開されたくない場合、名前の後に「:非公開」とつけてください。