UnityのGraphic Raycaster【使い方とスクリプト】

component thumbnail

この記事はUnityのコンポーネントGraphic Raycasterについて解説している記事です。

<Graphic Raycasterとは>

キャンバスへレイキャストを行い、キャンバス上のどのUIにヒットしたのかを決定します。

これはCanvasと一緒でなければ使用できません。また、EventSystemが無いとレイキャストを飛ばしてもUGUIは反応しません。

CanvasとEventSystemの解説は↓で行っています。

CanvasをUnityのメニューから作成すると、作った時に一緒に様々なもの作成されます。それらについての解説は別の記事で行っています。

<Graphic Raycasterのインスペクター>

graphic raycaster inspactor

Ignore Reversed Graphics

レイキャスターから反対方向を向いている場合も考慮するかどうかです。

Blocking Objects

UIより前にオブジェクトが置いてある場合、レイキャストをブロックするオブジェクトのタイプを選択します。

・None・・・なし
・Two D・・・2Dオブジェクト
・Three D・・・3Dオブジェクト
・All・・・全て

Blocking Mask

Blocking Objectsでブロックするとされているオブジェクトの中でさらにレイヤーが一致するオブジェクトをブロックし、それ以外はブロックしません。

スポンサーリンク

<Graphic Raycasterのスクリプトの使い方>

名前空間UnityEngine.UI
class
継承EventSystems.BaseRaycaster

デフォルトの状態から使用するには

using UnityEngine.UI;

と記述するか

UI.GraphicRaycaster

とする必要があります。

クリックすると展開します

blockingObjects

UIより前にオブジェクトが置いてある場合、レイキャストをブロックするオブジェクトのタイプを選択します。

型 GraphicRaycaster.BlockingObjects型

enum型です。

・GraphicRaycaster.BlockingObjects.None・・・なし
・GraphicRaycaster.BlockingObjects.TwoD・・・2Dオブジェクト
・GraphicRaycaster.BlockingObjects.ThreeD・・・3Dオブジェクト
・GraphicRaycaster.BlockingObjects.All・・・全て

○ 使い方
正直スクリプトからこの値を動的に変えることはほぼないと思います。エディタ拡張で専用のキャンバスをワンボタンで作成できるようにする場合などでしょうか。

//レイキャストをブロックするオブジェクトを変更します。
GraphicRaycaster gr = GetComponent<GraphicRaycaster>();
gr.blockingObjects = GraphicRaycaster.BlockingObjects.TwoD;

eventCamera

レイを生成するカメラです。

読み取り専用です。

型 Camera型

○ 使い方
UIを動作させているカメラを取得したい場合に使用します。

//このキャンバスの動作の起点となっているカメラを取得します。
GraphicRaycaster gr = GetComponent<GraphicRaycaster>();
Camera c = gr.eventCamera;

ignoreReversedGraphics

レイキャスターから反対方向を向いている場合も考慮するかどうかです。

型 bool型

○ 使い方
正直スクリプトからこの値を動的に変えることはほぼないと思います。エディタ拡張で専用のキャンバスをワンボタンで作成できるようにする場合などでしょうか。

//レイキャスターから反対方向を向いている場合も考慮するようにします。
GraphicRaycaster gr = GetComponent<GraphicRaycaster>();
gr.ignoreReversedGraphics = true;

Raycast

レイキャストを打ってヒットしたもの全てを返します。

1. レイキャストを放つポインターのデータ : EventSystems.PointerEventData型
2. レイキャストが当たったものの結果 : List<RaycastResult>型

引数が参照型の為、引数に結果が返ってきます。

戻り値(返り値)

なし

○ 使い方
貫通して複数のUIを取得したい場合や、マルチタップした場合などで使用します。

//using UnityEngine.EventSystems; と記述

//現在のマウスの位置からレイキャストを撃ってヒットしたものを取得します。
GraphicRaycaster gr = GetComponent<GraphicRaycaster>();
EventSystem ev = EventSystem.current;
PointerEventData ped = new PointerEventData(ev);
ped.position = Input.mousePosition;
List<RaycastResult> rr = new List<RaycastResult>();
gr.Raycast(ped, rr); //結果はrrの中に入っています。

変数や関数がよくわからない方は↓の記事を参考にしてみてください



タイトルとURLをコピーしました