Developer

【初心者Unity】矢印キーを使ってオブジェクトを操作しよう!(GetAxis)
2021.01.13
Lv1

【初心者Unity】矢印キーを使ってオブジェクトを操作しよう!(GetAxis)


はじめに

Unityでゲームを作ろうというみなさんならきっと覚えがあるでしょう。「矢印キーを使ってキャラクターを操作したいなぁぁぁ」という悩み!この悩みを解決することがこの記事の役目です!
実はこのお悩み、Input.GetAxis()というメソッドを使うことで簡単に解決することができます。とはいってもそもそもこんなメソッド見たことも聞いたこともないという方がほとんどだと思います。ご安心ください。そんなあなたのために、この記事では具体的にスクリプトを作成しながら解説していきます。
因みに矢印キーってこれね。


Input.GetAxis()とは

実際にスクリプトを書く前にまずはInput.GetAxis()というメソッドが具体的に何をすることができるのかを紹介していきます。それはズバリ!矢印キーを入力すると数字を返してくれます!具体的に言うと、「→」を入力すると「1」、「←」を入力すると「-1」、「上」を入力すると「1」、「↓」を入力すると「-1」を返してくれます。

※厳密には、ずっと「1」「-1」なわけではありません。スムーズな動きに見せるために最初は小さな数字から始まり、徐々に1または-1に近づいていくような仕様になっています。例えば、「↑」キーを押し続けた場合、最初は「0.01」等の小さな数字で、「0.02」、「0.04」、「0.08」、、、の様に徐々に大きくなっていき、最終的に「1」になります。因みに、スムーズな動きになる補正無しのメソッドとして「GetAxisRaw」もあるので、是非併せて覚えておいてください。

これだけ!たったこれだけのメソッドなのです!単純明快で分かりやすいですよね?(笑)こんなに単純ですが、このメソッドがあることで矢印キーの入力をスクリプト上でGet!することができるので大変便利です。


実際に使ってみる

勘の良い方は、矢印キーの入力をスクリプト上でGet!することができることに大変なありがたみを感じていらっしゃる所かとは思います。しかし、まだ「矢印キーの入力Getしたところでキャラ移動できなくね?」と眉間にしわが寄っている方もいらっしゃるかと思います。確かに、スクリプトによるキャラ移動はGetAxisのみならずその他様々なメソッドを組み合わせることで実現することができます。これで「はいさよならよ」と終わられてしまっては困る方が未だ9割程いらっしゃるかと思います。そこで!まだまだ終わりません。
ここからは実際にGetAxisやその他のメソッドを用いてキャラの移動を実装していきます。

まずはInput.GetAxis()についてもう少し掘り下げた解説をしていきます。
いきなりですがここで問題!
「→」「←」「↑」「↓」これら4つのキーを2つのグループに分けるとしたらどのように分けることができますか?
・・・
答えは。。。
横向きキーの「→」「←」
縦向きキーの「↑」「↓」
の様に分けることができます。
これは感覚的にもご理解いただけるかと思います。2Dゲームを例に挙げるのであれば横移動は「→」「←」を使い、ジャンプ・土管に潜る(??)等の上下の動きには「↑」「↓」を使いますよね?
GetAxisにおいては「→」「←」のことを「Horizontal」(日本語で「水平方向」の意)、「↑」「↓」のことを「Vertical」(日本語で「垂直方向」の意)といいます。日本語的にもよく意味が伝わってきますね。
GetAxisではまず、「Horizontal」「Vertical」どちらの入力を受け取るかを指定する必要があります。具体的には、「Input.GetAxis(“Horizontal”);」とスクリプトに書いた場合、「→」「←」の入力のみ数値で返します。「Input.GetAxis(“Vertical”);」とスクリプトに書いた場合、「↑」「↓」の入力のみ数値で返します。
また、これまた感覚で解決できそうですが、横グループの中では「→」が「1」、「←」が「-1」となり、縦グループの中では「↑」が「1」、「↓」が「-1」となります。
はい!これでGetAxis完璧ですね!それではいよいよ下のスクリプトが実装となります。とりあえず動きを見たい方は下のスクリプトをコピペしていただき、Cubeにでも貼り付けて(アタッチして)ゲームを再生してみてください。矢印キーに従って動きます。

    //座標の変数定義
    Vector3 pos;
    void Start()
    {
        //オブジェクトの現在の座標を入手
        pos = transform.position;
    }
    void Update()
    {
        //横矢印入力を値で返し変数「yokoyajirushi」に格納
        float yokoyajirushi = Input.GetAxis("Horizontal");
        //縦矢印入力を値で返し変数「tateyajirushi」に格納
        float tateyajirushi = Input.GetAxis("Vertical");
        //変数「pos」のx軸における座標を毎フレーム毎に「yokoyajirushi」の分だけ増加
        pos.x += yokoyajirushi;
        //変数「pos」のy軸における座標を毎フレーム毎に「tateyajirushi」の分だけ増加
        pos.z += tateyajirushi;
        //変数「pos」の値をオブジェクトの座標に反映させる
        transform.position = pos;
    }

それでは以下スクリプトの解説となります。
GetAxisが使われているのは11行目と13行目です。11行目で「→」「←」キーによる値を「yokoyajirushi」に格納し、13行目で「↑」「↓」キーによる値を「tateyajirushi」に格納しています。次に15行目で「yokoyajirushi」の値をオブジェクトのx軸に、17行目で「tateyajirushi」の値をオブジェクトのz軸に、加えています。

上の「Start」・「Update」がよくわからないよ!という方はこちらの記事を参照

【Unity連載】UnityとC#におけるメソッド一覧


おまけ

下記リンクは今回のGetAxis()によるオブジェクトの動きをGetKey()メソッドを使って実装した記事になります。興味のある方は是非ご覧ください。

 

連載目次リンク

「初心者のための」Unityゲーム制作 目次

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次