【コピペでUnity】このスクリプト1つだけでクリック実装は完了!ホイールクリックも楽勝

Unity
Unity

クリックの実装をしたい人

クリックの関数名忘れた…。
スクリプトは出来たけど、これってアタッチする必要あるんだっけ?

こういった疑問にお答えします。

 

本記事の内容

●クリックの実装をコピペで済ませよう
●クリックのスクリプトはアタッチが必要
●クリック取得のバリエーション

この記事を書いている私は12才からフルスクラッチでゲームを作っています。
またコンパイラを専門として情報理工学の博士まで進学、中退をしており、プログラミング言語の文法にも関わる論文を書いていました。

 

本記事ではコピペ出来るスクリプトを元にクリックの設定方法を紹介しつつ、右クリックやホイールクリックなどの細かいカスタマイズについても解説します。

 

※実行環境
Unity2021.3.1f1
Windows 10

 

クリックの実装をコピペで済ませよう

数パターンの記述を並べてみました。
基本的にはUpdate関数内に書いておけばよいでしょう。

 

using UnityEngine;

public class Click : MonoBehaviour {
    private const int LeftClick = 0;
    private const int RightClick = 1;
    private const int MiddleClick = 2;

    private bool _bool;
    private Vector3 _vector3;

    void Update() {
        //左クリックした瞬間はtrue
        _bool = Input.GetButtonDown("Fire1");

        //左クリックしている間はtrue
        _bool = Input.GetButton("Fire1");

        //左クリックを離した瞬間はtrue
        _bool = Input.GetButtonUp("Fire1");


        //左クリックした瞬間はtrue
        _bool = Input.GetMouseButtonDown(LeftClick);

        //右クリックしている間はtrue
        _bool = Input.GetMouseButton(RightClick);

        //ホイールクリックを離した瞬間はtrue
        _bool = Input.GetMouseButtonUp(MiddleClick);


        //画面左下を(0,0)として、マウスの座標を取得
        _vector3 = Input.mousePosition;
    }
}

 

●_bool
各判定の結果をtrue, falseで取得

●_vector3
マウス座標の格納に利用
3次元の扱いが前提だが、mousePositionの場合は常にzは0

 

クリックのスクリプトはアタッチが必要

クリックなどの操作はゲーム全体の話だし、このまま動いてくれるだろう…。
と思うかもしれませんがそうではありません。

Unityはどちらかというと、ゲーム画面上のそれぞれのオブジェクトがクリックの情報を取得しに行く必要がある、という設計です。
よって何らかのゲームオブジェクトにスクリプトをアタッチすることで、オブジェクトにクリック情報を探させることが大事です。

以下のように設定しましょう。

 

クリックの設定方法

1.「Hierarchy」ウィンドウの余白で「右クリック > 3D Object > Cube」
2.「Inspector」ウィンドウでCubeの「Transform」を下図のように設定

 

3.「Project」ウィンドウの余白で「右クリック > Create > C#スクリプト」
4.名前を「Click」に変更
5.サンプルコードをコピーペーストして保存

 

6.「Hierarchy」ウィンドウで追加した「Cube」をクリック
7.「Inspector」ウィンドウ最下部の「Add Component」ボタンをクリック
8.「click」と入力すると先ほど作った「Click」が出てくるのでクリック

 

これでCube内で諸々のキー操作を取得できるようになりました。
Debug.Log関数などで確認してみましょう。

 

クリック取得のバリエーション

ではソースの詳細を確認していきましょう。

Windowsでよく使われるマウスでは左クリック、右クリック、ホイールクリックの3パターンがあります。
加えてクリックといっても押した瞬間なのか離した瞬間なのかで操作が変わるので、こういったところも自在に実装できるのが大事です。

 

GetButton系でのクリックの判別

GetButton系の関数では引数「Fire1」を与えることで左クリックの取得が可能です。
ここで使用している「Fire1」はInput Managerの設定で決められている操作で、左クリック以外に左Ctrlキーなどが反応するようになっています。

実際にInput Managerの設定を確認してみましょう。

 

1.メニューバーで「Edit > Project Settings…」
2.「Project Settings」ウィンドウで「Input Manager」をクリック
3.「Positive Button」や「Alt Positive Button」を変更

 

もちろん右クリックやホイールクリックも取得が可能です。
戻し忘れたりすると面倒なので、理解にある程度自身のある方は書き換えを試してみてください。

●左クリック…mouse 0
●右クリック…mouse 1
●ホイールクリック…mouse 2

 

GetMouseButton系でのクリックの判別

クリック取得の分かりやすさでいえばGetMouseButton系が最適だと思います。
なにより関数名から何をしているかがパッと見で分かりやすいです。

という長所があるにも関わらず引数が定数を打ち込む仕様になっており、公式でも数字がベタ打ちのまま紹介されていて、あと1歩分かりやすさが欲しいところです。

●左クリック…0
●右クリック…1
●ホイールクリック…2

 

サンプルコードの通り、個人的にはマウスボタンを分かりやすくする定数を作っておくことをオススメします。

 

Down、Upの違い

サンプルコードのそれぞれの関数の違いをもう少し深く理解しましょう。
クリックはプログラム以前にボタンを押すか押さないかの話なので、

①押している
②押していない

という物理的に2つの状態が存在します。

 

これを前提としてGetButton系の関数の挙動を説明すると、

●GetButtonDown→②から①の状態になったらtrue
●GetButton→①の状態ならtrue
●GetButtonUp→①から②の状態になったらtrue

という違いがあります。
最も注意が必要なのは、「GetButtonDownとGetButtonは同時にtrueになる」ということです

このように、単なるクリックでもより細かい理解をしておくことで、コマンド入力などの実装に迷わなくなると思います。

 

クリックに関しては以上です。

Unityはいいぞ。

コメント

タイトルとURLをコピーしました