ドローコールを発生させない透明ボタンを作るための便利クラスを作ってみた

追記 2019.7.23

Unityバージョン2018.2以降だと本記事のスクリプトを使用しなくてもドローコールを発生させない処理ができるようになっております。
やり方は以下の通り:

  1. 透明ボタン用のImageコンポーネントを作成
  2. アルファ値を0にする
  3. 同じゲームオブジェクトの Canvas Renderer コンポーネントにある「Cull Transparent Mesh」にチェックを入れる

これでドローコールが発生しない透明ボタンが作成できます。
試しにOverdrawでシーンを確認してみると、描画されていないのがわかると思います。

概要

例えば、ポップアップを表示したときに何も無い所(背景とか)をクリックしても閉じられるようにしたい時があると思います。
よくある方法としてアルファ値を0にした Image コンポーネントをつけたゲームオブジェクトを用意し、
それを画面一杯にひろげて透明ボタンにすると思います。
ただ、これだとドローコールが発生してしまいます。

なのでドローコールが発生しない透明ボタンを作成するためのユーティリティクラスを用意しました。

開発環境:Unity 2017.4.3f1
Githubにもサンプル付きでアップロードしました。
https://github.com/Goropocha/UnityRaycastDetector

使い方

Buttonコンポーネントと同じところにアタッチします。
ButtonのTransition設定は None にしておきます。
Imageコンポーネントは不要です(というか、付いていると上記コードがアタッチできない)
あとはボタンのイベントをセットして完了です。