Unityを使っていると、Update関数が多すぎて
どこで何が動いているのか把握しきれなくなる。
そんなあなたのための記事です。
普段、僕たちが呼んでるUpdate関数は、一体どこから呼ばれているんでしょう。
知ってる人は教えてほしいし、俺は知らない。
その神様クラスが見えないからわからなくなるんだと思います。
では問題です。
どうすれば神様クラスを把握ことが出来るでしょうか。
答えは、新しく神様を作る、です。
こうした考え方は昔からあります。
それをデザインパターンと呼ぶらしいです(昨日知りました
その中でも、Mediatorパターンが今回教えるものに近いです。
どういった考え方かと言うと……、
![](https://asamagames.com/site/wp-content/uploads/2021/08/jiotvs5a.bmp)
それぞれのクラスを呼び出す調停者クラスを用意して、
そこから管理してしまおうという考え方です。
この考え方を、Unityに寄せたものを僕は使っています。
実際にUnityのコードを載せます。
GameManager.cs
ObjectController.cs
使い方
![](https://asamagames.com/site/wp-content/uploads/2021/08/gu9avdeg.bmp)
利用するアセットはこれだけです。
まずマテリアルを、赤・緑・青、の三色用意してください。
![](https://asamagames.com/site/wp-content/uploads/2021/08/8eyukixx.bmp)
ヒエラルキー上にはこのように配置してください。
RedCube, GreenCube, BlueCubeの三つは3D ObjectのCubeです。
すべての位置を(0,0,0)に設定でお願いします。
![](https://asamagames.com/site/wp-content/uploads/2021/08/6m8702kf.bmp)
![](https://asamagames.com/site/wp-content/uploads/2021/08/h2cmt7cz.bmp)
![](https://asamagames.com/site/wp-content/uploads/2021/08/zf04ufpj.bmp)
マテリアルを貼り付けて、見た目で違いがわかるようにします。
用意したObjectController.csも貼り付けます。
![](https://asamagames.com/site/wp-content/uploads/2021/08/nnmhqjta.bmp)
GameManager.csをGameManagerオブジェクトに貼り付けた後、
それぞれのObjectController.csをGameManager.csに渡します。
お疲れさまでした。
あとは実行するだけで、結果が見られると思います。
肝はint型のstepとnext_stepを用意してあるところです。
next_stepの値をstepにコピーするというのがとても大事で、
それにより安全な形で更新されるようにしてあります。
next_stepが-1以外のときに、初期化の処理を行います。
更新したいObjectControllerのupdate(Uは小文字)だけを
呼び出すので、このほうが無駄なUpdate関数も減らせるはずです。
一か所で管理することで、比較的わかりやすく、
さらにパーツごとにわけて考えやすくもなっているはず……。
デバッグもしやすいので個人的にはオススメの形です。
ここまでお付き合いいただきありがとうございました。
コメント