0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hamster OutputAdvent Calendar 2024

Day 12

【Unity】Arbor3でAnimatorのAnyStateのような強制ステート遷移がしたい

Last updated at Posted at 2024-12-24

はじめに

この記事はHamster Output Advent Calendar 2024の12日目の記事です!

今回、Arbor3のステートマシンを利用している時にAnimatorのAnyStateのようなステートの強制遷移ができるのかと疑問がでたので、調べたことを書きます。

参考にしたリンク

結論

・スクリプトから強制ステート遷移するなら

ArborFSMを参照 → StateLink変数を作成してArborFSMのFindStateメソッドでステートを取得 → ArborFSMのTransitionメソッドの引き数にStateLinkを渡す

・ArborEditorから強制ステート遷移するなら

ResidentStateを作り遷移条件を作成する

現時点で自分が知っている方法はこの辺り...下の方でもう少しだけ詳細に手順を書いていきます

スクリプトから強制ステート遷移

先ほどの内容をソースコードにするとこんな感じです。Findなので、名前間違いやステートが存在しない場合エラーになるので注意。

using Arbor;
using UnityEngine;

public class Test : MonoBehaviour
{
    [SerializeField]
    private ArborFSM _arborFSM;
    private State _anyState;

    private void Start()
    {
        // ステートを取得
        _anyState = _arborFSM.FindState("Idle");
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // ステートの遷移
            _arborFSM.Transition(_anyState);
        }
    }
}

ArborEditorから強制ステート遷移するなら

Residentは常駐という意味です。ArborEditor上でもResidentに追加した処理や条件が達成するとResidentに強制ステート遷移ができます。

作り方はとても簡単で、ArborEditor上で右クリックを押してResidentStateを作成
image.png

ResidentStateに遷移条件を追加する...これだけです。
image.png

使うならどっちが良いか

簡単な強制ステート遷移ならResidentState。強制ステート遷移だけど、連続で呼ばれたくなかったり調整をしたいならスクリプトから強制ステート遷移を作成する。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?