Help us understand the problem. What is going on with this article?

unityでreduxアーキテクチャを使った堅牢なシーケンス制御の実装

More than 1 year has passed since last update.

はじめに

リアクティブスパゲッティ好きですか?僕は苦手です!
Reduxアーキテクチャをゲーム用にアレンジしてバグのないゲーム制作を楽しみましょう!

Reduxアーキテクチャって何?という人はこちらをどうぞ
https://qiita.com/kiita312/items/49a1f03445b19cf407b7

「ゲームプログラマになる前に読む本」を読んだ人はstoreってstatemachineのことなんじゃ…と思うでしょう
はい、僕はstatemachineと捉えました!

sample code

https://github.com/masak2/redux_custom
state_info.jpg

動かしてみよう

2017-09-30_23h30_16.png

実行してみればわかりますが
wait3secボタンを押してから httpボタンを押しても何も起きません
3秒経過してidle stateに戻ってからでないと遷移が起きないのです!
statemachineだから当然ですね
そしてこれがいいんです!

ボタン押されたコールバックに直接ロジックを書くとどうなるでしょう?
wait3secボタンを押してからhttpボタン押すと通信始まってしまいます!
httpボタン押してからwait3secボタン押すと待ち処理始まってしまいます!
よくある同時押しバグ、通信中に別の処理できちゃったバグのオンパレードです

本家reduxとの違い

生成されたactionをdispatchせずactionBlackboardに登録しておくことです
そして各stateがactionBlackboardに登録されたactionを評価するのです
間髪入れずactionをdispatchしてしまうと同一フレームにおいて発生したactionが順番に評価されてしまうためバグの温床になってしまいます

メリット、デメリット

メリットはなんといっても堅牢さ
シーケンス制御にからむ進行不能バグは発生しません
コルーチンと違いブレークポイントで簡単に止められるためデバッグも容易です

デメリットは冗長さと可読性の悪さ
1秒待つのにもstateを用意しなくてはいけないのは退屈です
コルーチンならyield return new WaitForSecond(1f)一行です
またコルーチンやunirxに比べて可読性も悪くなりがちです
この辺はクラスベースのstatemachineにするとか
arbor2使ってみるとかで対応するのはどうでしょうか?

まとめ

やっぱりstatemachine最高ですね!!!
現実のプロジェクトでは階層型statemachineを使うことになります
未だイケてる実装を見たことがありません
Artifical Intelligencs for gamesのHSM c++実装が一番近いけど使いづらかった…
nugetにあるHSMはゲーム用途ではないためやはり使いづらい…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした