【Unity2D】キー操作を出来るようにしよう
こんにちは。なおキーヌです。
ブログ毎日更新は309日目になります。
前回「【Unity2D】ARPGのドット絵ゲームを開発していく下準備」にてゲームを作るための土台を作りました。
今回はスプライトを動かすためにキー操作を実装していきます。
第2回目からいきなりC#のソースコードを書いていきます。
基本的に私の講座ではC#でゴリゴリ書いていくのが基本になるので割合としては、
Unityでの操作3割、C#でコード記述7割となっていますのでよろしくお願いいたします。
キー操作スクリプトを作ろう
早速キー操作を出来るようにC#のスクリプトを作成していきます。
幸い、Unityではキー操作を簡単に記述できるように準備してくれているので、
それを組み合わせてIF文で分岐させるだけで実装できます。
簡単ですね!
Assetsディレクトリに「Script」ディレクトリを前回作成したのでその更に中に
「Controller」というディレクトリを作成します。
キー操作関連スクリプトファイルはそこにまとめていきましょう。
ひとまずコードを打ちこんでもらって、後ほど解説します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller : MonoBehaviour
{
// 移動時の加算用変数
float vx = 0;
float vy = 0;
// 移動スピード
public float speed = 30;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 毎フレーム数値を初期化
vx = 0;
vy = 0;
// 横移動
if (Input.GetKey(KeyCode.LeftArrow)) {
vx = -speed;
} else if (Input.GetKey(KeyCode.RightArrow)) {
vx = speed;
}
// 縦移動
if (Input.GetKey(KeyCode.UpArrow)) {
vy = speed;
} else if (Input.GetKey(KeyCode.DownArrow)) {
vy = -speed;
}
// 実際の移動処理
this.transform.Translate(vx/50, vy/50, 0);
}
}
簡単に説明すると、Updateでキー入力を監視してそれに応じて加算用変数にスピードを代入し、
処理の最後に移動処理に値を適用することで移動が出来るようになります。
Input.GetKey(キーコード)
Unity側で用意してくれている関数です。
引数に渡したキーコードが押されていると「TRUE」が返ってきます。
押されていないと「FALSE」が返ってきているので条件式としてそのまま使えます。
ちなみに1回押しただけという処理を取りたい場合はGetKeyDown関数を使います。
使い方はGetKeyとほぼ同じです。
UnityというかC#ではファイル名とクラス名が一致していないとエラーを起こすので、
スクリプトファイルを生成する時に命名はクラス名を付けているものと思ってください。
後からファイル名だけを変更するとスクリプト側のクラス名が変わってないので注意しましょう。
プレイヤーにスクリプトを張り付けて動かそう
最低限の移動処理用スクリプトが完成したので、プレイヤーオブジェクトに貼り付けます。
貼り付け方は第1回目でPixelObjectBaseスクリプトとまったく同じやり方です。
AddComponentでもいいですしスクリプトをD&DでもOKです。
フレームレート30にして録画してるのでちょっと動きがぎこちないですが実際は60FPSでています。
スクリプト側でスピード変数を「Public」を付けていたのを覚えていますか?
実はPublicを付けるとアタッチしたオブジェクトのインスペクタで数値を変更できるようになります。
しかし何でもかんでもPublicにしては管理が大変ですしバグの元となるので、
最低限自由にいじりたい変数や外部オブジェクトから弄りたい変数にだけPublicを付けるのが基本です。
──第2回は少し短いですがスクリプト入力作業があったのでここまでにしておきましょう。
次回はアニメーションを作る作業に入ります。
ドット絵は各自用意しておいてください。
ローカルでやる分にはドット絵の用意の手段は問いません。
ググれば色々でてくるはずです。
それでは。