Unity C#でマウスが乗った時、乗ってる間、離れた時にイベントを起こす方法/OnMouseEnter、OnMouseExit、OnMouseOverメソッドの使い方

glasses IT

スクリプトをアタッチしたオブジェクトに対し、OnMouseEnterではマウスが乗った時、OnMouseExitではマウスがオブジェクトから離れた時、OnMouseOverでは乗っている間ずっとイベントを起こすことができます。

スポンサーリンク

前準備

onmouseenter1
適当なオブジェクトを用意し、
onmouseenter2
コライダーを置いて、スクリプトをアタッチします。

OnMouseEnter

マウスが乗った時イベント実行(メソッド)
OnMouseEnter
//Unity C#
void OnMouseEnter()
{
this.GetComponent<SpriteRenderer>().color += new Color(-0.1f, -0.1f, -0.1f, 0);
}
まずはOnMouseEnterから。
このへんの記事でも同じことしてますが、マウスが乗った時にオブジェクトのを変えてみます。
onmouseenter
実行結果です。
メソッド内の命令がマウスがオブジェクトに乗るたびに一度実行されるのと、マウスがオブジェクトを離れても元に戻ったりしないことが確認できます。

OnMouseExit

マウスが離れた時イベント実行(メソッド)
OnMouseExit
//Unity C#
void OnMouseExit()
{
this.GetComponent<SpriteRenderer>().color += new Color(0.1f, 0.1f, 0.1f, 0);
}
対してOnMouseExitの場合、マウスがオブジェクトから離れた時に実行されるイベントなので、OnMouseEnterとは真逆の動きということになります。
onmouseexit
実行結果です。OnMouseEnterで暗くなったオブジェクトが、OnMouseExitで元に戻されています。

OnMouseDrag×OnMouseExit

//Unity C#
void OnMouseDrag()
{
this.GetComponent<SpriteRenderer>().color += new Color(-0.01f, -0.01f, -0.01f, 0);
}

void OnMouseExit()
{
this.GetComponent().color = new Color(1f, 1f, 1f, 1f);
}
ここではOnMouseDragを使い、オブジェクト内でドラッグしているうちは色を変え、外に出たら元に戻すということをしようとしていますが、
onmouseexitdrag
OnMouseDragはドラッグしていればオブジェクトから離れても実行され続けるため、外に出て元に戻った後また色が変わってしまうようです。
//Unity C#
bool boxFlag = true;

void OnMouseEnter()
{
boxFlag = true;
}

void OnMouseDrag()
{
if (boxFlag)
{
this.GetComponent().color += new Color(-0.01f, -0.01f, -0.01f, 0);
}
}

void OnMouseExit()
{
boxFlag = false;
this.GetComponent().color = new Color(1f, 1f, 1f, 1f);
}
フラグを別に用意し、フラグが有効な時だけドラッグ時のイベントが起こるようにしてやれば、
onmouseexitdrag2
目的の状態が達成できます。

OnMouseOver

マウスが乗っている時イベント実行(メソッド)
OnMouseOver
//Unity C#
void OnMouseOver()
{
this.GetComponent<SpriteRenderer>().color += new Color(-0.01f, -0.01f, -0.01f, 0);
}
最後にOnMouseOverですが、これは単純にオブジェクトにカーソルが乗っている間だけ実行されます。
onmouseover
実行結果です。OnMouseEnterとちがい継続的に実行されるので、マウスが乗ってる間は段々暗くしたい、といった場合に使えます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント