【Unity徹底解説】Graphic Raycaster【使い方・スクリプト】

キャンバスへレイキャストを行い、キャンバス上のどのUIにヒットしたのかを決定します。これはCanvasと一緒でなければ使用できません。Canvasの解説は↓の記事から

<インスペクター>

graphic raycaster inspactor

Ignore Reversed Graphics

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

Blocking Objects

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

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

Blocking Mask

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



<スクリプト>

<名前空間・型・継承>

・namespace
UnityEngine.UI

デフォルトの状態から使用するには
using UnityEngine.UI;
と記述するかUI.GraphicRaycasterとする必要があります。

・型
class型

・継承
EventSystems.BaseRaycaster

変数

・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をコピーしました