こんにちは。
前回の続きで、今回はプレイヤーのキー操作ができるようやっていきます。
まず、変数の設定から。プレイヤーの動くスピードとジャンプ力と、スライドモーションを設定します。
スライドモーションは、プレイヤーが動いて、止まる時に急にピタッと止まると不自然なのでスライドしてから止まるようにする為のものです。
public float walkForce = 10f; //スピード
public float flyForce = 300f; //ジャンプ力
[Range(0,1)] public float sliding = 0.9f; //スライドモーション
次に、十字キーで左右に動くようにします。
FixedUpdate()の中に、以下を追記します。
// 左右のキー変数
float h = Input.GetAxis("Horizontal");
// 速度の変数
Vector2 v = GetComponent<Rigidbody2D>().velocity;
if (h != 0) {
// 左右の移動
GetComponent<Rigidbody2D>().velocity = new Vector2(h * walkForce, v.y);
transform.localScale = new Vector2(Mathf.Sign(h), transform.localScale.y);
} else {
// スライドモーション
GetComponent<Rigidbody2D>().velocity = new Vector2(v.x * sliding, v.y);
}
Input.GetAxis(“Horizontal”)は、右を押し続けると0から1.0まで増えていき、左を押し続けると0から-1.0まで減っていきます。
10行目でプレイヤーの向きを制御しています。scaleをマイナスにするとスプライト(プレイヤー)は反転するのでそれを利用しています。
Mathf.Signは、負の値が入れば-1を、正の値が入れば1を返してくれます。
再生して、左右のキーを押して確認します。
次に、ジャンプもできるように設定していきます。
また、FixedUpdate()の中に、以下を追記します。
//ジャンプ
if(Input.GetKey(KeyCode.UpArrow) && grounded)
GetComponent<Rigidbody2D>().AddForce(Vector2.up * flyForce);
Input.GetKey(KeyCode.UpArrow)は、十字キーの上キーのことです。
再生して、上キーを押して確認します。
色々とジャンプさせてみると分かるのですがフワッとしたジャンプをしてしまい、本家のマ○オとはちょっと感じが違いますのでこの辺りは微調整が必要そうです。他にもあやしいところはありますね。
他にも色々と時間制限や点数なんかを付け加えるとかゲーム要素を加えてくいくと、それなりに面白くなります。
今までのあたり判定やアニメーションを駆使して、アクションゲームの醍醐味である敵キャラなんかをつくって遊んだりしみてください。
ブラウザゲーム(Chrome以外)としてビルドしたのはコチラです。
とりあえず、こちら一連のチュートリアルは終わりになります。
ありがとうござました。