【Unity】OnMouseとは?マウスカーソルによる接触を検知できるメソッド

OnMouseメソッドとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「OnMouse関連のメソッドについて知りたい!」

「マウスカーソルでどうやって操作できるの?」

というお悩みの方に向けた内容となっています。

Unityでは、マウスカーソルを使った処理を作る際に、「OnMouse」から始まるメソッドが使われます。

このOnMouse関連のメソッドは、Collider(コライダー)の付いたオブジェクトの上にマウスカーソルが接触すると呼ばれるメソッドで、その中に処理内容を書いておくことで、マウスカーソルが触れた際の処理を作ることができます。

また、OnMouseのメソッドは、接触の判定によって4つの種類

  • OnMouseEnter
  • OnMouseOver
  • OnMouseExit
  • OnMouseDown

に分かれています。

そこで、このページでは、Unityでマウスカーソルの接触を検知できるOnMouse関連のメソッドについて、どんな仕組みなのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

OnMouseのメソッドとは?

まずは、OnMouseのメソッドがどのような仕組みや機能なのかについて紹介していきます。

マウスカーソルとオブジェクトの接触を検知するメソッド

OnMouseのメソッドは、オブジェクトにマウスカーソルが接触しているかどうかを検知して、処理を行うことができるメソッドです。

もう少し詳しく言うと、Colliderコンポーネントが付いているオブジェクトにマウスカーソルが接触すると、OnMouseのメソッドが呼び出されることになります。

そして、そのOnMouseのメソッドの中に処理内容を書いておくことで、マウスカーソルと接触した際にその処理が実行されることになります。

例えば、表示されているオブジェクトの上にマウスカーソルを合わせたら、「オブジェクトを消去する」「オブジェクトの色を変える」などの処理を、OnMouseのメソッドで作ることができます。

マウスカーソルの判定次第で4つのメソッドに分かれる

OnMouseのメソッドは、マウスカーソルとの接触や状況によって、以下の4つのメソッドが呼び出されることになります。

  • OnMouseEnter:マウスカーソルがオブジェクトに接触した瞬間
  • OnMouseOver:マウスカーソルがオブジェクトの上に乗っている間
  • OnMouseExit:マウスカーソルがオブジェクトから離れた瞬間
  • OnMouseDown:マウスカーソルがオブジェクトに接触状態でクリックした瞬間

OnMouseEnter:マウスカーソルがオブジェクトに接触した瞬間

OnMouseEnterは、マウスカーソルがオブジェクトに接触した瞬間の1度だけ呼び出されるメソッドです。

1回の接触時に、処理が実行されるのは1度だけとなるので、大きな変化を行う際に使います。

例えば、OnMouseEnterメソッドにオブジェクトを削除する処理を書いた場合、オブジェクトに触れた瞬間に削除されることになります。

OnMouseOver:マウスカーソルがオブジェクトに接触している間

OnMouseOverは、マウスカーソルがオブジェクトに接触している間、何度も呼び出されるメソッドです。

1度だけの呼び出しでは無いため、徐々に変化させるような処理を作る際に使います。

例えば、OnMouseOverメソッドにオブジェクトを回転させる処理を書いた場合、オブジェクトに触れている間は、常に回転している状態になります。

OnMouseExit:マウスカーソルがオブジェクトから離れた瞬間

OnMouseExitは、マウスカーソルがオブジェクトから離れた瞬間の1度だけ呼び出されるメソッドです。

つまり、マウスカーソルとオブジェクトがすでに接触している状態にあって、そこから離れた時に呼び出されることになります。

例えば、OnMouseExitにオブジェクトを削除する処理を書いた場合は、以下のように離れた際にオブジェクトが消えることになります。

OnMouseDown:マウスカーソルがオブジェクトに接触状態でクリックした瞬間

OnMouseDownは、マウスカーソルがオブジェクトに接触している状態で、マウスをクリックした瞬間に呼び出されるメソッドです。

他のOnMouseのメソッドとは違い、「接触」+「マウスのクリック」がトリガーとなっています。

例えば、OnMouseDownにオブジェクトを削除する処理を書いた場合は、オブジェクトにマウスカーソルを合わせておき、その状態でマウスをクリックしたら削除されるようになります。

UIオブジェクトには機能しない

OnMouseのメソッドを使う際、UIのオブジェクトに対しては機能しないことになるため、注意しておきましょう。

前述の通り、OnMouseのメソッドは、接触させたいオブジェクトに対して、Collider(コライダー)を付けておくことで、マウスカーソルとの接触を検知しています。

しかし、UIのオブジェクトには、Colliderを付けることができないため、OnMouseのメソッドを使って接触を検知することはできません。

そのため、UIではOnMouseのメソッドを使わないように気を付けましょう。

なお、UI要素でマウスカーソルを合わせた処理を行いたい場合は、EventSystemというオブジェクトを使って、OnPointerEnterOnPointerExitなどのメソッドで実装できます。

EventSystemについては、以下のページで詳しく解説していますので、参考にしてみてください。

OnMouseのメソッドの使い方

ここからは、OnMouseのメソッドの使い方について紹介していきます。

オブジェクトにColliderを付ける

まず、マウスカーソルを接触させたいオブジェクトに対して、Colliderコンポーネントを付けておきましょう。

ここでは、2Dゲームで以下の四角いオブジェクトを配置して、「Box Collider 2D」のコンポーネントをアタッチしています。

なお、Colliderコンポーネントについて分からない方は、以下のページでまとめていますので、参考にしてみてください。

OnMouseメソッド内で接触を検知した際の処理を実装

次に、マウスカーソルがオブジェクトに触れた際の処理を実装していきます。

オブジェクトにスクリプトをアタッチして、そのスクリプト内でOnMouseのメソッドの処理内容を書いていきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    SpriteRenderer sr;

    void Start()
    {
        sr = GetComponent<SpriteRenderer>();    // SpriteRendererコンポーネントを取得する
    }

    // マウスカーソルと接触した場合
    void OnMouseEnter()
    {
        sr.color = Color.red;   // 赤色に変更する処理
    }
}

ここでは、13行目から16行目でOnMouseEnterを使って、マウスカーソルが触れた瞬間の処理を記載しています。

以下のように書いてあげることで、

void OnMouseEnter()
{
    // 接触した際の処理を記述
}

マウスカーソルが接触してOnMouseEnterが呼び出されると、中に書いた処理が実行されるようになります。

ここでは、オブジェクトの色を変更させる処理を書いたので、

上記のようにマウスカーソルが接触したら、色が変わるようになりました。

マウスカーソルでオブジェクトに様々な処理を実装する

ここまででOnMouseのメソッドの使い方が分かったと思うので、実際にオブジェクトに対して様々な処理を実装してみます。

先ほどのスクリプトを修正していきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    SpriteRenderer sr;
    float rotationSpeed = 0.1f; // 回転させるスピード

    void Start()
    {
        sr = GetComponent<SpriteRenderer>();    // SpriteRendererコンポーネントを取得する
    }

    // マウスカーソルと接触した瞬間
    void OnMouseEnter()
    {
        sr.color = Color.red;   // 赤色に変更する処理
    }

    // マウスカーソルと接触している間
    void OnMouseOver()
    {
        transform.Rotate(0, 0, rotationSpeed);  // オブジェクトを回転させる処理
    }

    // マウスカーソルが離れた瞬間
    void OnMouseExit()
    {
        sr.color = Color.white;   // 白色に変更する処理
    }

    // マウスカーソルと接触中にクリック
    void OnMouseDown()
    {
        rotationSpeed *= -1;    // 逆回転にする処理
    }
}

まず、16行目にOnMouseEnterで接触した瞬間に、オブジェクトを赤色に変更する処理を書いています。

22行目のOnMouseOverで接触している間は、Rotateメソッドを使ってオブジェクトが回転する処理を行っています。

そして、28行目にOnMouseExitで離れた瞬間に、オブジェクトの色を戻す処理を行っています。

また、34行目でOnMouseDownでマウスをクリックしたら、オブジェクトが逆回転するように変数の値を変更しています。

これでゲームを実行してみると、

マウスカーソルによって様々な処理を作ることができています。

まとめ

このページでは、UnityのOnMouseのメソッドについて、どんな機能や仕組みなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

OnMouseのメソッドは、Colliderの付いたオブジェクトとマウスカーソルの接触を検知して呼び出されるメソッドです。

OnMouseメソッド内に処理を書いておくことで、マウスカーソルが触れるとその処理が実行されるようになります。

また、OnMouseには接触の状況によって、「OnMouseEnter」「OnMouseOver」「OnMouseExit」「OnMouseDown」の4つに分かれていて、様々なタイミングでの処理を実装することができます。

最後までお読みいただき、ありがとうございました!

コメント