0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】シーン上やプレハブの RaycastTarget を一括でいい感じに無効にするEditor拡張

Posted at

概要

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 を無効にできるので、設定忘れを防げます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?