投稿日:2017-11-24 Fri
Unityはビヘイビア貼り付けて、そこで変数設定したり、SendMessageあったりとFlashよりはDirectorに近い構造だったりします。addEventListenerとかでイベント受け取る手法は、ActionScript3とかと比べるとあまり使わない手法だし、そこまで魅力的な手法ではないかもしれないと思われますが、
クリエイトウェーブの場合は、Flash時代から複数人のプログラマーが担当部分のプログラムを作って、親のコントロール部分のプログラムが統括連携していく事が多いので、出来るだけ担当プログラム以外のオブジェクトとかには干渉したくないところ・・・・
担当部分だけで完結するように出来るだけ閉じてモジュール連携を行う・・・ なるべくカプセル化したい訳です。
こうする事によって、複数人でも連携しやすくなるし、忘れた頃プログラムみてもソースを追いやすくなります。
こうなってくると、CallBackやらEventListenerの仕組みが必要になってくるんですが、まあどこまで依存するかによります。
ということでEventListenerの仕組みを実装してみました。
まずは
ListenerEvent.cs
EventDispatcher.cs
の2ファイルを準備します。
RemoveEventListeneとEventDispatchrは、Listの後ろの順番からとるのがコツ。
さてうまく動くか実験です・・・
適当なgameObjectを作って、「EventTest」と名前を変えます。
下記のCSファイルを「EventTest」ゲームオブジェクトに貼り付けましょう。
CSの名前は任意ですが、とりあえず同じ「「EventTest」.cs」にしておきます。
継承は「MonoBehaviour」ではなく、「EventDispatcher」を継承します。
「EventDispatcher」のほうに「MonoBehaviour」が継承してあります。
5秒後に EventDispatch("event_complete"); で "event_complete"イベントを発生させます。
後は、MainCameraなり別のGameObjectに下記の「Controller.cs」を貼り付けます。
問題なくイベントを受け取る事が確認出来ました。
今回は、イベント発生だけをやりましたが、引数にEventオブジェクトなりを渡すようにしてやれば、ActionScript3で行っていた処理とほぼ同じ事が出来るようになります。
△ PAGE UP