Page 1 of 1

Immediate 指定のTransitionのふるまいに関しまして

Posted: 2018/10/12 09:39
by moyashiking
たびたびお世話になりますm(_ _)m

Transition のImmediate 指定について色々と試していたところ、気になる挙動があったので確認させてください。
Immediate指定のループのステートにTranslateを含めてみたところ、Velocityの指定が反映されませんでした。
試しに同じステートにカウンタを追加してみましたが、そちらは普通に動作しておりました。
これもやはり、処理の優先度によるものでしょうか?
Unity 2018.2.11f1 Personal (64bit) - SampleScene.unity - test_Arbor(ClickTest) - PC, Mac & Linux Standalone _DX11_ 2018-10-12 18.16.46.png
Unity 2018.2.11f1 Personal (64bit) - SampleScene.unity - test_Arbor(ClickTest) - PC, Mac & Linux Standalone _DX11_ 2018-10-12 18.16.46.png (382.6 KiB) Viewed 4037 times

Re: Immediate 指定のTransitionのふるまいに関しまして

Posted: 2018/10/12 23:33
by caitsithware
TransformTranslateの処理タイミング(Update Method Type)がUpdateかOnStateUpdateしかなく、CalcParameterやGoToTransitionはOnStateBeginで処理している関係ですね。
開始ステート側のGoToTransitionをImmediateにし、TransformTranslate側のGoToTransitionをLateUpdateDontOverwriteにすると1ループ内の処理は同じでありながら期待通りの動作になるかと思います。

つまり、
  1. 開始ステート
    • 特に何も処理せず、瞬時にTransfromTranslateステートへ遷移。
  2. TransfromTranslateステート
    • GoToTransformのOnStateBeginでLateUpdate時に遷移するように予約
      (もしImmediateにしてしまうとここで遷移してしまうため、それ以降の処理が呼ばれない)
    • TransfromTranslateのUpdateで移動処理。
    • LateUpdateにて予約済みの遷移先に遷移。
    という流れになる、ということになります。

    ちなみに、今回の場合ですと無理に遷移させる必要がなく、
    開始ステートにTransformTranslateを1個設定するだけでも、毎フレーム移動いたします。
    (もちろん、ほかに毎フレーム何らかの処理をする場合はImmediateによる遷移も必要になってきますが)

    TransformTranslateFSM.png
    TransformTranslateFSM.png (44.43 KiB) Viewed 4035 times
    (↑最小限、移動させたいだけならこれだけでOK)

    また、その都度聞かれるのも大変かと思いますので、現状どうやって処理の流れを確認すればいいかもお教えいたします。
    1. 各StateBehaviourの歯車アイコンをクリック
    2. スクリプト編集を選択。
    3. スクリプトを見て、どのメソッドで処理しているか確認。
    もし、プログラムについてわからない点があれば、チーム内のプログラマに解析をお願いするか、個人であれば最低限のプログラミングの知識は得ておくと良いかと思います。
    (Arborはプログラミングを前提としたアセットですので、使いこなすとなるとプログラミングは必須になっていますので)

    チュートリアルもありますので、もしまだお試しでなければ試してみてくださいね。
    チュートリアル

Re: Immediate 指定のTransitionのふるまいに関しまして

Posted: 2018/10/14 07:50
by moyashiking
詳細な解説ありがとうございますm(_ _)m
大変参考になりました、またひっかかるようであればスクリプト部分も確認していきたいと思います。