Unityに関連する記事です

 デリゲートの実装方法について、活用事例を含めて紹介します。
ダイアログ(ポップアップ)内から外部クラスにある処理を制御する際に、デリゲートを利用した実装例です。

 今回の場合、開いているダイアログを強制的に閉じる処理を作成しています。
例えば、スマホゲームであればフッター部にあるシーン切り替えボタンを押した際に、
次のシーン上に現在開いているダイアログが残らないようにするときなどに利用できます。


 前回の記事はこちらになります。

  => デリゲートの実装例
  => デリゲートの実装例
  => デリゲートの実装例



設計


 ダイアログ(ポップアップ)を制御する際にデリゲートを利用した実装例です。
最初の教材で提示した図を再掲載します。





 具体的な実装内容としては、メソッドの引数にデリゲートを活用することで、
ダイアログ側では管理側との依存関係を持たず、管理側のメソッドを実行することが可能になります。

 今回の場合、開いているダイアログを強制的に閉じる処理を作成しています。
このとき、メソッドの戻り値を活用することで、ダイアログが開いているかどうかを判定させる機能を利用しています。


動画ファイルへのリンク


DialogManager クラスの修正


 Start メソッド内にデバッグ用の処理を追加記述し、Esc キーを押すことでダイアログが開いている場合には強制的に非表示にする処理を行っています。

 ダイアログ側に渡す引数付の CloseDialogAction メソッドについては、処理内部を修正し、引数の値によって表示されるログを分岐する処理に変更しています。
強制的にダイアログを非表示にする場合には引数の値が null として渡ってくるため、引数によってログ表示が変化するようになります。


<= クリックすると開きます




 キーボードの「Escape」キーを押すとダイアログを閉じるためのトリガーを設定します。
dialogInstance が存在し、ダイアログを非表示にすることができる場合、ダイアログを閉じます。
そして非表示すると Hide メソッドの戻り値が返ることにより、ログの表示処理を続けて実行する仕組みになっています。

 CloseDialogActionメソッドは、ダイアログが非表示になったときに呼び出されるコールバック処理です。
引数なしのバージョンと、ItemData を引数として受け取るバージョンが定義されています。
このメソッド内で、ダイアログが非表示になったことをログに記録しています。

 今回の修正により、ItemData が null でない場合、ItemData の id フィールドをログに表示します。
null の場合は「選択された情報はありません」と表示します。


まとめ


 if 文内で戻り値のあるメソッドを実行し、その戻り値を活用することで、ダイアログの表示状態を変更した上で処理を実行していくことが出来ます。

 コールバック処理の引数の値も変化するため、それに合わせて処理を作成しておくことで、null の場合であっても処理を停止させずに動くようにしています。

 このようにデリゲート、およびメソッドの戻り値を組み合わせると、大変柔軟な処理設計を行うことが出来るようになります。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます