こんにちは。大変お世話になっております。
Arborを使っております。
要件: 前の状態に楽に遷移したい
解決策1: Transition(previousState)
問題点: Transitionを通してメンバーのPreviousStateに遷移してしまうと、現状の状態が再度PreviousStateになってしまい、Transition(previousState)を繰り返すことでずっと前に戻るわけではなく二つのステートを行ったり来たりすることになってしまいました。
解決策2: 別途のStateLinkを貼って強制的に遷移させる
問題点: 複数のステートから現状のステートに遷移した際は、それぞれのステートに戻す処理が手間がかかってしまいます。
一応スクリプトに手を加えればなんとかなりそうな気はしているのですが、他の解決策があれば教えて頂けると助かります。
previousStateにつきまして
Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
- We can not answer your questions about your project specific issues.
- We can not answer your questions on Unity's specification issues.
- Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.
ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
- ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
- Unityの仕様上の問題に対する質問には答えられません。
- Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
- caitsithware
- 管理人
- Posts: 495
- Joined: 2015/08/17 12:41
Re: previousStateにつきまして
厳密にいえば仕様となります。
Transition(previousState)の呼び出し箇所や、前の状態の遷移条件をもう一度確認してみてください。
- 無条件にTransition(previousState)を呼び出して前の状態に遷移するようするよう作られている
- 前の状態でも無条件にGoToTransitionなどで遷移するように作られている
検証内容
一つ前の状態に戻るだけの動作については、以下のコードやグラフで検証しましたので、参考にしてみてください。
●検証環境
・Windows 10
・Unity 2019.3.3f1
・Arbor 3.6.9
●BackToPrevStateBehaviour.cs
Code: Select all
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class BackToPrevStateBehaviour : StateBehaviour
{
public override void OnStateBegin()
{
State prevState = prevTransitionState;
if (prevState != null)
{
Transition(prevState);
}
}
}
「前の前に戻る」
またprevTransitionStateを使って「前の前に戻る」といった動作は想定外であり実現できません。
こちらについては以下の方法を参考にしてみてください。
- 提案1: ご提示いただいた解決策2で一時的に対処する
- 提案2:戻り先のステートの名前で遷移する
(グラフ見るだけでは遷移が追えなくなるなどの問題もあるのでご注意を)
Code: Select all
Transition(stateMachine.FindState("名前"))// 簡易に記述したため、nullチェックなどは別途行ってください。
- 提案3:グラフの階層化を用いて「グラフの下位へ進む/上位へ戻る」という考え方で進む/戻るグラフを作る。
グラフの階層化
※例:「EndStateMachineのSuccessがtrueなら、上位グラフに戻った後さらにEndStateMachineで戻る」などとすれば前の前に戻れる。