いう本を年始に読みました。実際に試してみたい内容が盛りだくさんだったので、以下記事の自分のコードを直してみようと思います。該当コード今回修正するのは以下の処理です。処理の流れとして、まずはスキャンを促すUIを表示します。次に画面の中央からRayを出し、検出した平面と衝突した場合は画面タップを促すUIを表示します。タップしたら画面の中央から出したRayと平面との交点にオブジェクトを表示するという流れです。}}「良いコード/悪いコードで学ぶ設計入門」はUnityを題材に書かれたものではないので、私の個人的な解釈で以後の設計に落とし込んでいきます。そのため、本記事のリファクタ方法がそっくりそのまま書籍の内容に沿ったものではない点にご留意ください。今回リファクタリングする内容は以下です。Update関数のわかりにくい条件分岐をなくすクラス名変更や処理をメソッド化して可読性を上げることも併せて行っていますが、あまり過度に気にしすぎない程度に修正しています。先にリファクタ結果のクラス図を示します。下記のような設計になりました。以下の配置処理をシーケンスに分割します。処理の流れとして、まずはスキャンを促すUIを表示します。次に画面の中央からRayを出し、検出した平面と衝突した場合は画面タップを促すUIを表示します。タップしたら画面の中央から出したRayと平面との交点にオブジェクトを表示するという流れです。配置処理を分割した結果が以下です。スキャンを促す配置予定地を表示し、設置を促す配置完了あとはこれらのシーケンスをクラス化し、適切なタイミングで呼び出す仕組みを作ります。大きく分けて、GameObject操作の変更とシーケンス制御の変更を行っていきます。GameObject操作の変更まず、RayCastの処理と、設置を促すUIの挙動についてです。これらをGameObjectの操作を行う処理とし、それぞれ切り出していきます。次にシーケンス制御をリファクタリングしていきます。シーケンスについて今一度おさらいすると、以下となります。スキャンを促す配置予定地を表示し、設置を促す配置完了Interfaceを定義シーケンスが遷移した際のふるまいを実装可能なインターフェースを定義します。OnEnter();}このインターフェースを先ほど定義したシーケンスとしてふるまうクラスに実装していきます。各シーケンスのクラスはPureクラスとして振舞わせたいので、MonoBehaviourのクラスを定義し、配置処理に必要なインスタンスの参照をまとめます。arRayCasterToPlane;}この参照をひとまとめにしたクラスをインターフェースの実装先で利用できるように修正します。各シーケンスのインターフェースを実装していきます。最後にシーケンスを切り替えるクラスを実装します。}}Start関数でステートの変更を監視し、Update関数で操作に応じてステートを変更しています。まとめ非常にわかりやすい書籍で、目からうろこの内容盛りだくさんの良書でした。本を読んでわかった気でいましたが、いざやってみると、「あれこの分割したクラス同士はどう参照すればきれいなんだっけ」とか「MonoBehaviourのときはどうすれば?」みたいな疑問がいろいろ湧いてきたのでやってみてよかったです。