UnityUnityでゲーム開発をしているほとんどの人がお世話になっているであろうuGUI。そのuGUIの中でも使用率が高いButtonですが、何も考えずにクリック時の処理を作成していくとスクリプトが細麺スパゲッティの大盛りになってしまいます。1Buttonに対して1スクリプトを作った場合、画面にボタンが10個あったらスクリプトも10個になってしまいます。モジュール数を増やすのは管理が大変になるので避けたいです。Buttonクリック時の処理を1個のスクリプトに記述した場合、スクリプトは1個で済みますが呼び出したい関数をUnityの画面で選択するのが大変です。UnityはGUIでいろいろできるのが利点ですが、選択する要素が多すぎるとGUIの操作もストレスに感じます。できることならButtonクリック時の処理は1個のスクリプトの1個の関数にしてしまいたい。そんなわがままをできる限りかなえる方法をご紹介いたします。スポンサーリンク共通化しなかった場合の問題点まずは共通化しなかった場合の問題点について整理しましょう。・1Buttonに1スクリプトの場合Buttonの数だけスクリプトが必要になるので管理が大変。選択するものが増えて操作にストレスを感じる。数が少なければ別にそこまで気にはならないことですが、やはり管理しやすく実装しやすい状態こそが開発者として望ましいかと思います。スクリプト呼び出しの共通化それでは早速スクリプト呼び出しの共通化を行いましょう。(64-bit)を使用して作成しています。共通化するためにクラスの継承を使用します。オブジェクト指向プログラミングというやつです。クラスの継承についてはこの記事では説明しませんが、気になる方は調べてみてください。親クラスとなるスクリプト(ここでは「BaseButtonController.cs」とします)を作成します。作成した親クラスのスクリプトは以下のように実装します。}}次に、子クラスとなるスクリプト(ここでは「SampleButtonController.cs」とします)を作成します。作成した子クラスのスクリプトは以下のように実装します。Script」でスクリプトを作成した場合、デフォルトでMonoBehaviourを継承した状態になっていますが、子クラスではそれを先ほど作成した親クラス(BaseButtonController)に変更しています。次にヒエラルキーに空のGameObject(名前を「SampleButtonController」に変更しました)を作成し、作成した子クラスのスクリプトをコンポーネントとして追加します。publicフィールド”Button”には何も設定する必要ありません。今度はuGUIのButtonに作成した親クラスのスクリプトをコンポーネントとして追加し、publicフィールド”Button”に先ほど作成した「SampleButtonController」オブジェクトを割り当てます。Click()に親クラスのスクリプトのOnClick関数を割り当てて完了です。Button2についても同様の手順で親クラスのスクリプトを適用してください。この状態でゲーム画面を起動してボタンをクリックしてみましょう。Button1をクリックしたらコンソールに以下のように出力されたと思います。Button2をクリックしたらコンソールに以下のように出力されたと思います。同じスクリプトの同じ関数の呼び出しでButton毎の処理を分けるできました。これでスクリプト呼び出しの共通化については完了です。画面単位で子クラス(XXXButtonController.cs)を作成すればスクリプトの管理もやりやすいと思います。※10画面あったら計11個(親クラス含む)のボタン操作用スクリプトが必要となりますが、画面とスクリプトが紐付けられるので管理しやすくなります以上、uGUIのButtonクリック時のスクリプト呼び出しを共通化でした。オブジェクト指向プログラミングやクラスの継承については以下の書籍で詳しく解説されています。第3版Unity5.xの勉強なら以下の書籍がおすすめです。@lethargyproject関連記事Javaで文字列の日付チェックするときは気を付けようという話たまにはプログラマっぽいことを書いてみようと思います。「こいつ今更何言ってんの?」とか「そんなこと知ってますー、ぷすすー」といった反...記事を読むJavaのインターフェースと抽象クラスの使い分けについてJavaで開発しているとき、インターフェースや抽象クラスを使用することがあると思います。St...記事を読むJavaの単体テストでprivateなメソッドを呼び出したい!そんなときはリフレクションを使用しよう。jUnit等のテストツールを使う際、privateなフィールドやメソッドにアクセスしたい時ってありますよね。privateで宣言され...記事を読む【Unity】常に同じ高さまでバウンドするオブジェクトを作成する自分用のメモみたいなものです。何も考えずにバウンドさせようと思った場合、...記事を読む【Objective-C】アプリで作成した動画をInstagramでシェアするUnityでアプリを作成している際、Instagramに動画をシェアする必要が出てきたのですが、iOSだとサードパーティ製のアプリから直接動...記事を読むUnityでSQLite!SQLiteUnityKitに潜む4つの問題点と対応方法UnityでSQLiteを使用する場合、無料で使えるSQLiteUnityKitが個人の開発者に大人気です。自分用のメモみたいなものです。Studioプロジェクトをビルドする際に注意することリリースしてしばらく放置していたライツアウトゲームに致命的な不具合があり、それを修正するために開発環境を再構築しました。HWD34の対応バンドJavaの単体テストでprivateなメソッドを呼び出したい!そんなときはリフレクションを使用しよう。