本記事の環境
本記事は以下の環境で開発を進めております。
- 開発OS: Windows OS(UnityはMac OSでも同様に開発可能)
- Unity: 4.5.3
- 開発言語: C#
- IDE: Visual Studio 2013 + Tools for Unity(標準のMono Developでも可)
OSについてはWindowsを利用しますが、Macでも同様に開発可能です。IDEにVisual Studioを利用しますが、標準のMonoDevelopでもコードは変わりません。
サンプルプログラムは本記事開始時(第3回終了直後)のプロジェクトが「project_004_start.zip」、終了時点のプロジェクトが「project_004_end.zip」です。
記事開始時点の状態にする
本記事の開始時点の状態から開発を開始する方法を紹介します。
project_004_start.zipのダウンロード
project_004_start.zip(プロジェクト初期)をダウンロード。任意のディレクトリに解凍します。
プロジェクトを開く
Unityを起動して上部メニューの「File」-「Open Project...」をクリックします。展開したファイルのproject\actionGameフォルダを開いた状態で「フォルダーの選択」をクリックします。
以上で本記事開始時の状態のプロジェクトが開かれます。
今回作成するサンプルを実行する
今回作成する内容を実行すると、以下のようになります。コードを書き始める前にゴールを確認しておくと理解しやすくなると思います。
- 今回作成するものを確認する(Unity Playerプラグインを許可する必要があります)
キャラクターをジャンプさせる
まずは、シンプルにキャラクターに上向きの力を加えて上昇させてみます。
ジャンプキーの取得
今回はスペースキーでキャラクターをジャンプさせることにします。スペースキーが押されたかどうかは、InputクラスのGetKeyDownメソッドで以下のように取得します。
// スペースキーでジャンプ
if (Input.GetKeyDown("space"))
{
// スペースキーが押された際の処理を記述
}
キャラクターをジャンプさせる
キャラクターのジャンプは上向きの力を与えることで実現します。前回キャラクターを左右に動かす場合にrigidbody2D.AddForceメソッドを利用した処理の上方向版です。
// 上方向に力を加える this._charactor.rigidbody2D.AddForce(Vector2.up * 400f);
ジャンプキーの取得と合わせると以下のような処理になります。
// スペースキーでジャンプ
if (Input.GetKeyDown("space"))
{
this._charactor.rigidbody2D.AddForce(Vector2.up * 400f);
}
コードを整理してGameManagerクラスの書き換えます。
public class GameManager : MonoBehaviour {
private GameObject _charactor;
// Use this for initialization
void Start () {
// キャラクターを取得する
this._charactor = GameObject.Find("charactor");
}
// Update is called once per frame
void Update () {
// 左右のキーで左右に移動
float horizontal = Input.GetAxis("Horizontal");
this._moveCharactor(Vector2.right * 10f * horizontal);
// スペースキーでジャンプ
if (Input.GetKeyDown("space"))
{
this._moveCharactor(Vector2.up * 400f);
}
}
/// <summary>
/// キャラクターを移動させる
/// </summary>
/// <param name="force">移動させる方向と値</param>
private void _moveCharactor(Vector2 force)
{
this._charactor.rigidbody2D.AddForce(force);
}
}
これでスペースキーを押すと、キャラクターが上方にジャンプするようになりました。
現時点の問題点
ここまでのコードには問題があります。キャラクターがジャンプ中にスペースキーを押すと、さらにジャンプを行いキャラクターがどんどん上昇して行ってしまいます。そういうゲームもあるでしょうが、今回は「ジャンプ中は再度上昇することはできない」という仕様にしたいと考えています。

