Arbor2:   自分用メモ

Arbor2のメモ。

 Arbor2はunityでステートマシンを使うことができるアセットです。



 ステートマシンはunityのMechanimにもついている。下記参照。

docs.unity3d.com

<使い分け>
アニメ素材で遷移を管理したい=>Mechanim
コード+ステートマシンで管理したい。=>Arbor

使うと便利な事。
・ステート毎に分けてコードを書けるのでシンプルでわかりやすいし、バグも見つけやすい。monodevelopを継承しているのですぐ使える。


ステートの小さな歯車をクリックしてスクリプト編集を使うと、コードが見れるので参考になる。


f:id:gamemaker98:20161113223045j:plain

開始ステートから接続されたステートに移る。
常駐ステートはいつでも条件が満たされたら実行する。
ーーーーーーーーーーーーー
挙動
 ステートの遷移はTransitionに用意されている。
f:id:gamemaker98:20161114123245j:plain
 時間や距離などで遷移する事ができる。
 即遷移はgotoTransition

-----------------------------------

実行順序

http://arbor.caitsithware.com/tutorial/coding/

Awake <=  これが最初
OnStateAwake (一回だけ実行)
OnStateBegin
Start <= 順番注意:(一回だけ実行)
Update-----
OnStateEnd
2回めのステート実行
OnStateBegin
Update------- 
OnStateEnd

----------------------------------------------------
statebehavior のコードを書くには

Project =>Create => Arbor =>StateBehavior =>C#を選択しファイルを作る。
作ったスクリプトはArborEditorで挙動追加=>scriptの中に入っている。

StateBehaviourのカスタマイズ – Arbor

スクリプトでArborを使うにはusing Arbor;を宣言する。

------------------------------------------------


変数
プロパティで設定するならseriarizeかpublicしたものを使う。

f:id:gamemaker98:20161114122421j:plain
他のステートでも同じ変数を使いたい場合はParameterContainerを使う。

f:id:gamemaker98:20161114122247j:plain
シーンを遷移する場合も同じ変数を使いたいならglobalParameterContainer。

http://caitsithware.com/assets/arbor/scriptreference/ja/class_arbor_1_1_parameter_container_internal.html

外部から利用例:基本の変数コマンドは用意されている。
--- set

gameObject.GetComponent<ParameterContainer>().SetFloat("damagex",9f);

---- get
int seeRange;

gameObject.GetComponent<ParameterContainer>().GetFloat("seeRange",out seeRange);


------------------------------------

ステートの移動はTransition 。stateLinkに接続先を指定。
public StateLink NextState;で指定したステートをエディタで繋ぐ。
Transition(NextState);

-------------------------------

イベントにメッセージを送るにはsendTrigger系。
受けるにはTriggerTransitionを常駐させる。

 

f:id:gamemaker98:20161114091241j:plain

 

外部からステートを遷移させたいとき
gameObject.GetComponent<ArborFSM>().SendTrigger("ChangeState");

----------------------------------------

一定時間ごとに条件判定させて遷移する方法は、coroutine等があるようだ。

coroutineの参考にしたサイト:

dnasoftwares.hatenablog.com

public override void OnStateBegin() {
StartCoroutine(Loop(interval));
}
private IEnumerator Loop(float interval){
while(true){
yield return new WaitForSeconds(interval);
// if (-----)  Transition(NextState);
}
public override void OnStateEnd() {
StopAllCoroutines();// ("Loop")
}

-----------------------------------------
statebehaviourから現在のステート名を見るにはstate.name;

外部から現在のステートは何か取得する場合
gameObject.GetComponent<ArborFSMInternal>().currentState.name

注意:
上記をmonoのStartから実行するとエラーが出る。
monobehaviourのStartとarborFSMのステートの実行順を理解する必要がある。

 

--------------------------------------------

 参考ツイート

 


参考にしたサイト

フォーラム:掲示板

Arbor: State Diagram Editor - Index page

-------------------------------------------------------

 

tsubakit1.hateblo.jp 

tsubakit1.hateblo.jp