今回はUnityのゲームオブジェクトをマウス操作した時の処理をしてみます。
ゲームオブジェクトがUIのボタンであればUIのボタンのデフォルトのイベントを使ったり、Event Triggerコンポーネントを取り付けるやり方が出来ます。
通常のゲームオブジェクトであればインタフェースの実装とRaycasterコンポーネントを使うやり方もあります。
ですがもっと簡単にマウス操作を処理する方法もあります。
今回のサンプルを作成すると、
上のような感じで簡単にマウスイベントの処理が出来ます。
ゲームオブジェクトのマウス操作
ゲームオブジェクトのマウス操作を今回はMonoBehaviourクラスで定義されているイベント受け取りのメソッドを使って行ってみたいと思います。
これだとMonoBehaviourクラスを継承した普通のクラスを定義し、マウスイベントの受け取りメソッドを書いておけばゲームオブジェクトに取り付けるだけでマウスイベントを処理してくれます。
こんな簡単な方法あったのね・・・・(^_^;)
マウスイベント処理の簡単なサンプルを作ってみます。
ヒエラルキー上にCube等を作成し以下のスクリプトを取り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameObjectMouseEvent : MonoBehaviour { private Vector3 defaultPos; private Material mat; private void Start() { defaultPos = transform.position; mat = GetComponent<MeshRenderer>().material; } // 押された時 private void OnMouseDown() { mat.color = Color.red; } // ドラッグされた時 private void OnMouseDrag() { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); transform.position = ray.GetPoint(10f); } // 入ってきた時 private void OnMouseEnter() { transform.localScale *= 1.5f; } // 出ていったとき private void OnMouseExit() { transform.localScale /= 1.5f; } // 上にいる時 private void OnMouseOver() { Debug.Log("OnMouseOver"); } // 離した時 private void OnMouseUp() { transform.position = defaultPos; } // オブジェクト上で話した時 private void OnMouseUpAsButton() { mat.color = Color.gray; } } |
それぞれのメソッドが呼ばれるタイミングは
OnMouseDownはゲームオブジェクトが押された時
OnMouseDragはゲームオブジェクトがドラッグされている時
OnMouseEnterはゲームオブジェクト内にマウスポインタが入ってきた時
OnMouseExitはゲームオブジェクト外にマウスポインタが出た時
OnMouseOverはゲームオブジェクト上にマウスポインタがある時
OnMouseUpはマウスボタンが離された時(ゲームオブジェクトは関係ない)
OnMouseUpAsButtonはゲームオブジェクト上でマウスボタンが離された時
です。
上ではゲームオブジェクトという表記にしていますが、実際はゲームオブジェクトに取り付けているコライダやUIElementになります。
Unityを実行してゲームオブジェクトをマウス操作してみてください。