この記事はUnityのコンポーネントGraphic Raycasterについて解説している記事です。
<Graphic Raycasterとは>
キャンバスへレイキャストを行い、キャンバス上のどのUIにヒットしたのかを決定します。
これはCanvasと一緒でなければ使用できません。また、EventSystemが無いとレイキャストを飛ばしてもUGUIは反応しません。
CanvasとEventSystemの解説は↓で行っています。
CanvasをUnityのメニューから作成すると、作った時に一緒に様々なもの作成されます。それらについての解説は別の記事で行っています。
Canvasについては↓の記事で解説しています。
<Graphic Raycasterのインスペクター>
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の中に入っています。
変数や関数がよくわからない方は↓の記事を参考にしてみてください