概要
uGUI で利用する Image や Text 等の RaycastTarget が有効になっていると、少し処理負荷が高くなります。
それを知らずに途中まで作ったプロジェクトから RaycastTarget を一つずつ見直すのは大変です。
そこで、シーン上やプレハブの RaycastTarget を一括でいい感じに無効にするEditor拡張を作りました。
ただし、Button の targetGraphic に指定されていたり、EventTrigger を持っていたりするとUIが反応しなくなるので、そのような Graphic は無視します。
無視する条件
- Button や Toggle といった Selectable の targetGraphic に指定されている
- EventTrigger を持っている
- ScrollRect を持っている
- Scrollbar を持っているか、Scrollbar の handleRect に指定されている
- Slider の fillRect か handleRect に指定されている
GetGraphics() を編集すれば、追加の条件も簡単に加えられます。
コード
Editor フォルダに追加してご利用ください。
使い方
Hierarchy か Project ウィンドウのプルダウンメニューから「Disable RaycastTarget」を選択して利用します。
選択しているものやウィンドウによって処理する対象が変わります。
ウィンドウ | 選択 | 処理する対象 |
---|---|---|
Hierarchy | オブジェクト | オブジェクトとその子要素 |
Hierarchy | なし | 開いている全シーンの全オブジェクトとその子要素 |
Project | プレハブ | プレハブとその子要素 |
Project | フォルダ | フォルダ内にある全てのプレハブとその子要素 |
留意点
入力を遮る目的で利用している Graphic の RaycastTarget は、無視する条件では検知できないので無効にしてしまいます。もしそのような Graphic に「Blocker」のような名前が共通で付けられていたら、無視する条件として下記のように利用できます。
if (component.name.Contains("Blocker"))
{
ignoreRects.Add(component.transform as RectTransform);
}
補足
プリセットを使えば生成時点から RaycastTarget を無効にできるので、設定忘れを防げます。