Unityでマウスイベントのインタフェースの実装とレイキャスト

今回はUnityでイベントのインタフェースの実装を行う事で、マウスのイベントを発生させるようにしてみます。

マウスのイベントを発生させるにはUIのボタンのOn Clickに実行するメソッドを指定したり、Event Triggerコンポーネントを取り付けマウスイベントに応じて実行するメソッドを指定する事で行ってきました。

UnityのUIのクリックやドラッグのイベントを受け取る方法を勉強していきます。

今回はイベントのインタフェースを実装する事でイベントが起きた時に何らかの処理を実行出来るようにしたいと思います。

以前の記事で少し触れています。

UnityのJavaScriptでクラスやインタフェースの作成方法を学び、イベントの受け取りで実際に使用してみます

ただ、こちらはJavaScriptでの記述なので、C#であらためてやってみたいと思います。

スポンサーリンク

イベントのインタフェースの継承

イベントインタフェースを実装するにはまずインタフェースクラスを継承する形で新しいクラスを作成します。

新しいクラスはEventTestクラスにしました。

マウスがゲームオブジェクトに侵入した時に実行するOnPointerEnterメソッドはIPointerEnterHandlerインタフェースで宣言されているますので、そのクラスを継承して新しいクラスを作成します。

C#の場合は,(カンマ)に続けて継承するクラスを複数指定する事が出来ます(抽象クラスとインタフェース)。

OnPointerEnterメソッドはゲームオブジェクトにマウスポインタが侵入した時に呼び出されます。

引数で受け取るPointerEventDataはマウスイベントのデータを受け取りますが、これはあらかじめ宣言されている引数なのでそのまま記述します。

このスクリプトをUIのImage等に取り付けてマウスポインタをImageの上に持っていくと「マウスが侵入」という文字列がコンソールに表示されます。

イベントを検知する為に必要な物

UIのCanvasをヒエラルキー上に配置するとEventSystemが自動で配置されます。

Canvasを配置するとEventSystemが自動で配置される

↑のような感じになります。

EventSystemは入力デバイスからの入力があった時にゲームオブジェクトにイベントを送信する機能です。

ゲームオブジェクトを検知する為にレイキャストコンポーネントを取り付ける必要があります。

例えばCanvasを設置すると、

CanvasにはGraphicRaycasterが取り付けてある

↑のようにGraphic Raycasterコンポーネントがあらかじめ設定されており、UI要素を検知します。

UIの要素の検知にはUIのCanvasにGraphic Raycasterを設定、2D空間のゲームオブジェクトの検知にはカメラにPhysics 2D Raycaster、3D空間のゲームオブジェクトを検知するにはカメラにPhysics Raycasterコンポーネントを設定します。

UIの場合はCanvas、ゲームオブジェクトを検知する場合は写しているカメラに該当のRaycasterを設定します。

例えば3Dゲームオブジェクトを検知する場合はゲームの画面を写しているカメラにPhysics Raycasterを設定します。

MainCameraにPhysicsRaycasterを取り付ける

インタフェースの実装サンプルの作成

イベントに対応するインタフェースは参考サイトを参照して頂くとして、全部のインタフェースを継承し、メソッドの実装をしてみます。

EventTestという新しいクラスを作成します。

全部載せなので継承しているインタフェースがすごい事になってますが・・・・・(^_^;)

ヒエラルキー上にCubeを作成し、このスクリプトを取り付けます。

またUIの確認もする為、Canvasの子要素にUI→Imageを作成し、同じようにEventTestスクリプトを取り付けます。

CubeとImageにEventTestを設定

3Dゲームオブジェクトでのイベントも発生させたいので、MainCameraのインスペクタでAdd ComponentからEvent→Physics Raycasterを取り付けます。

それでは確認してみましょう。

↑のようになりました。

参考サイト

UnityマニュアルーEvent System マネージャーー

Unityマニュアルーサポートされているイベントー

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます