渋谷ほととぎす通信

エンジニア社長によるUnityとAIのブログ & エンジニアの生存戦略

【uGUI】RaycastTargetの使いすぎで負荷が上がる理由

【uGUI】RaycastTargetの使いすぎで負荷が上がる理由

こんにちは、Unityエンジニアのオオバです。

uGUIを使ってUI開発する際に RaycastTargetの負荷が課題になるときがあります。

一般的に必要最低限のRaycastTargetに絞ったほうが良いとされているのは 負荷が上がるためです。

どういった理由で負荷が上がるのか本記事ではRaycastTargetの負荷について解説します。またRaycastTargetで重くなる最悪のケースも紹介します。

RaycastTargetは必要なUIだけにすべき

RaycastTargetは必要なUIにだけ設定すべき理由は RaycastTarget ONのUIの数だけタップ時の負荷が高まる からです。

RaycastTarget ONのUIの数が重要です。

数が増えるほどタップしたときの反応は悪くなります。(負荷が上がります)

負荷を軽減するためにやるべきことまとめ
  • RaycastTargetは必要最低限に絞る(ボタンなど)
  • RaycastTarget ONのUIを重ねない

この2点を覚えておきましょう。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

【最悪のケース】RaycastTarget ONのUIを重ね過ぎると負荷

RaycastTarget ONのUIが大量に重なる時 が最も負荷が上がります。

コチラの画像を御覧ください。

【uGUI】RaycastTargetの使いすぎで負荷が上がる理由_0

※わかりやすく伝えるため極端に負荷をかけています

3パターン用意しました。

  1. RaycastTarget OFF
  2. 画面タップ(RaycastTarget ON時)※UIには触れていない
  3. RaycastTarget ONのUIが重なる部分をタップ

3. RaycastTarget ONのUIが重なる部分をタップが最も負荷が高いです。

RaycastTargetのUIが重なると負荷が上がる理由はUI同士のソート処理が増えるためです。

↓これが原因です。

Unityエディタ UnityProfilerの結果

【uGUI】RaycastTargetの使いすぎで負荷が上がる理由_1

通常使用であれば気にする必要なし

ただ普通に使っているぶんにはそこまで神経質になる必要はないです。

カリカリにチューニングする必要がある時にチェックしてみましょう。

UIに触れていなくても負荷は上がる

地味に重要なのは2番「画面タップ」です。

UIに触れていなくても画面をタップしただけで負荷が固定費として計上されます。

毎フレームの負荷なのでタップしている間ずっと重い状態です。

RaycastTargetの数が増えるほど負荷は上がるため注意が必要ですね。

RaycastTargetの対象uGUIのおさらい

おさらいになりますがRaycastTargetを設定できるuGUIは4種類あります。

  • Image
  • RawImage
  • Text
  • Button

これら4種類のuGUIがRaycastTargetの対象です。

※Buttonはタップの必要があるためOFFにすることはないでしょう

【uGUI】RaycastTargetの使いすぎで負荷が上がる理由_2

※↑こちらはImageのインスペクタ。RaycastTargetが必要なければチェックを外しましょう。

RaycastTargetの使いすぎで負荷が上がる理由のまとめ

もしUIを開発していてタップで重く感じた時、次の2点を思い出しましょう。

  • RaycastTargetは必要最低限に絞っているか
  • RaycastTarget ONのUIを重ねていないか

タップはユーザーと最も近いアプリとのコミュニケーションです。タップの感触でユーザは離れます。

気持ちの良いタップ処理を実装するためにもRaycastTargetの負荷は軽視しないほうが良いでしょう。

uGUIは開発が進むにつれて膨大な量となります。開発序盤からRaycastTargetをOFFにしておくことをオススメします。

あとから大量のUIをチェックするのは大変ですからね。

「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!

最後まで読んでいただきありがとうございました!
すばらしいRaycastTargetライフをお過ごしください。

オススメ記事
検証環境
  • Unity6000.0.32f1