yumeの日記: メデューサ・ゲーム改・11
◉**able、**er
『●●』を作っていて、イベント(UniRx)と委譲をもっとガンガン使った方がいいと気づいた。そうすることでクラスをもっと切り分けられる。
例えば前回までのTouchableには、実際には複数の機能(触れること・インタラクトできること)が混在している。
機能はどんどん切り分けていって、それぞれを最小単位のクラスにわけていこう。ついでに、それぞれの受動側と能動側のクラスを定義することで、機能の組み合わせでキャラクターにできることを設定していく。次のような簡単な規則を使う。
・**able(Touchable、Interactableなど)
>Touchできるもの、Interactできるもの。受動側。
>onTouchやonInteractイベントを発行する。
・**er(Toucher、Interactorなど)
>Touchするもの、Interactするもの。能動側。
>受動側にイベントを発行させる。
互いの関係性も理解しやすい(ToucherはTouchableに干渉できるのはすぐわかる)。し、あるキャラが何をできるか、ある設置物にはどういう干渉ができるかが明白だ。
というかUniRxすごく便利である。
この辺りの「コンポーネントとして使う」のはUnityエディタ的にはわかりやすいけど、本来はMonoBehaviourを継承しない純粋なクラスやInterfaceとして定義すべきだろう。ITouchableとかIInteractableとかにするわけだ。MonoBehaviourを継承すると不要なもろもろを継承してしまうわけだし。
でもUnity的なので一旦このようにしておこう(MonoBehaviourの機能を後から使いたくなるかもしれないし)。直すのもそんなに難しくはない……。と思う。
--
◉プレッシャー・プレート
プレッシャー・プレートを実装する。
プレッシャー・プレートは:
・重みのあるもの(人やアイテム)が上に乗ると、連動して仕掛けを動かす。
という抽象的な概念を持つ。
Toucherが触れればなんであれ反応する、という仕組みにしておき、鏡や重りのようなアイテムにもToucherをつければひとまずうまくいった。
ただ、この場合メカニズムが動くタイミングがアニメーション中になってしまうので、経路探索などに問題が生じるかもしれない。
TurnManagerに「Pressure感知タイミング」みたいなイベントを用意すべきだろう。
といったところで今日はここまで。
メデューサ・ゲーム改・11 More ログイン