OnMouseDown()が使えない

初心者あるある?

OnMouseDown()が使えず、オブジェクトをクリックしても何も起こらないという現象にはまったので忘備録として残します。

現象

上の図のようにオブジェクトをクリックしたときに処理が行われるようにOnMouseDown()がコード内には記載されています。この場合はクリックしたらコンソールウィンドウに”OnMouseDown”のテキストが表示されます。これがうまく動かないという状態。

軽く調べてみて、よくある原因としてはBoxColiderが設定されていないというのが挙げられていましたが、今回はちゃんと設定してあります。

参考書に沿ってゲームを作ってみたときにもこのメソッドは使用していて、問題なく動作していたのでなかなか原因がわからず…

結論

UnityをバージョンアップしたことによってOnMouseDown()が使えなくなったというのが原因でした。

上の画像はEdit>ProjectSettingsから出てくる画面で、左側のツリーからPlayerを選ぶと、Active Input Handlingという項目があります。この画像はすでに修正済みのものでBothを選んでいます。ここがデフォルトではInput System Package(New)というものが選択されており、これが選択されているとOnMouseDown()が使えなくなります。

要するにOnMouseDown()というメソッドは参考書などにもよく出てくる機能ですが、バージョンアップに伴って他の機能で代替されたことで、最新の機能パッケージからは外されたという落ちだったようです。

無効な機能ならエラーか警告くらい出せよ!と怒りがわきました。気づいていないだけで何か出てたかな?安易にバージョンアップはしてはいけないということですかね。

うまくいったときのコード

上記の対策の上、うまく動かせたコードを残しておきます。

using UnityEngine;

public class CardView : MonoBehaviour
{
    public Sprite frontSprite; // 表
    public Sprite backSprite;  // 裏

    private SpriteRenderer spriteRenderer;
    private bool isFront = false;

    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
        spriteRenderer.sprite = backSprite; // 最初は裏
    }

    void OnMouseDown()
    {
        isFront = !isFront;
        spriteRenderer.sprite = isFront ? frontSprite : backSprite;
    }
}

FrontSpriteとBackSpriteにカードの表面と裏面の画像を指定しておきます。コードを実行してオブジェクトをクリックすると画像が切り替わります。

投稿者 kumaharakumao

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です