tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

Unity OnMouseDown と OnMouseUpの注意点

Unityのオーバーロード関数に OnMouseDown や OnMouseUp というものがあります。
それぞれスクリプトで呼び出すことでColliderの範囲でマウスクリックした時、マウスのボタンを離したら呼ばれる関数になります。

正確にはOnMouseUpはCollider上でクリックされた後、座標の位置に関係なくボタンを離したら呼ばれます。

今回はUnityでよく使うこの二つの関数について。




簡単なスクリプトを書くと

OnMouseDown()
{
    //ボタンが押された画像に切り替え
}

OnMouseUp()
{
    //ボタンが押されていない画像に切り替え
}

こんな感じ。
単にCollider持ちのオブジェクトをクリックしたらボタンを押した画像になり、離した時に普通の状態になるだけのものです。


が、ちょっとした落とし穴があります。


「1フレームクリック」ではOnMouseUpは呼ばれないということです。

いわゆるちょん押しですが、この動作を行うとOnMouseUpが呼ばれず、指を離してもボタンが押された画像が表示されたままになってしまいます。
通常こういう操作をすることはあまりないかと思いますがクリックした時に画像の切り替えを行う動作を入れると明らかな操作ミスに見えてしまうので何とか直したほうが良いでしょう。



直し方一例

private bool isMouseOver

void Update () {
    if(Input.GetKey (KeyCode.Mouse0) && isMouseOver)
    {
        //ボタンが押された画像に切り替え
        if(Input.GetKeyDown (KeyCode.Mouse0))
        {
            //押された瞬間だけ実行したい処理
        }
    }
    else
    {
        //ボタンが押されていない画像に切り替え
    }
    isMouseOver= false;

    void OnMouseOver()
    {
        isMouseOver= true;
    }

これならちょん押しされても自動でelseに入って押されてない画像に切り替わります。