はじめに
みなさん、どうもはじめましての方ははじめまして、そうでない方もはじめまして、19のNです。今回はUnityを使ってWASDで動くようなPCゲームをあっという間にスマホ対応にできる便利な方法をブログにしようと思います。
さっそく本題
まず、Unityを起動して、新規プロジェクトを立ち上げ、PackageManagerからこちらのアセットをインポートしてください。そして、下図のようにAssets/UJoystick/Example/Scene にあるUJoystickというシーンを開いてください。
すると、下図のようなシーンが出てきて、スティックを操作して、ピンク玉を操作することができます。
これはどのように実装されているのでしょうか。Example/Scriptsのbl_ControllerExample.csを見てみましょう。すると、このスティックはbl_Joystick
クラスのオブジェクトになっていて、Vertical
とHorizontal
というメンバ変数の値でスティックの入力を受け取っていることがわかります。名前の通り、垂直方向にどれだけ動かされているか、水平方向にどれだけ動かされているかを受け取っていることがわかります。アナログ入力の場合、この実装の通り、
Vector3 translate = (new Vector3(h, 0, v) * Time.deltaTime) * Speed;
transform.Translate(translate);
とすればよいですが、PCゲームでありがちなWASD移動(デジタル入力)の場合、アナログ入力に移行するのは少し手間だし、互換性がなくなってしまいます。そこで、ある一定以上の入力があった場合、それをWASDに対応させることを考えます。例えば、Horizontal
の値が一定の値以上だったら、それを水平方向右に動かすDキーに対応させるといったことを実装します。そうすれば、このある一定の値をc
とかとして、
if (Input.GetKey(KeyCode.D))
{
// 移動の処理
}
上のようなコードを
if (Joysick.Horizontal > c)
{
// 移動の処理
}
のように書き換えるだけでスマホ対応ができてしまいます。では、このc
の値はどのくらいに設定すればよいのでしょうか。Debug.Log
でJoystick.Horizontal
の値を出力して調整してみましょう。
上の図くらい動かすとHorizontal
の値は4.9くらいになっていることがわかります。よって、c
は2~3くらいにすればちょうどいいのではないでしょうか。あとは、今DキーでやったことをWASでもやるだけで、プレイヤーの移動をすべてこのスティックに割り当てることができます。8888888888888888888888888888888
最後に
これでWASDで入力を受け取るようなPCゲームは大体スマホゲームになります。とても簡単なので、ぜひ試してみてください!
明日はクリスマスが近づいてきてウキウキな@Fogrexくんの記事です。お楽しみに。