SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Unity 2Dゲーム開発

速習 Unity 2Dゲーム開発
~第4回 キャラクターのジャンプ

速習 Unity 2Dゲーム開発 第4回

  • このエントリーをはてなブックマークに追加

 前回はキャラクターを左右に動かす処理を紹介しました。Unity2Dでは重力などの物理処理の演算や、キーボード操作が非常に簡単に実装できることがご理解いただけたのではないでしょうか。今回は少し処理を発展させてキャラクターをジャンプさせる処理を追加していきます。

  • このエントリーをはてなブックマークに追加

本記事の環境

 本記事は以下の環境で開発を進めております。

  • 開発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フォルダを開いた状態で「フォルダーの選択」をクリックします。

 以上で本記事開始時の状態のプロジェクトが開かれます。

今回作成するサンプルを実行する

 今回作成する内容を実行すると、以下のようになります。コードを書き始める前にゴールを確認しておくと理解しやすくなると思います。

キャラクターをジャンプさせる

 まずは、シンプルにキャラクターに上向きの力を加えて上昇させてみます。

ジャンプキーの取得

 今回はスペースキーでキャラクターをジャンプさせることにします。スペースキーが押されたかどうかは、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);
    }
}

 これでスペースキーを押すと、キャラクターが上方にジャンプするようになりました。

キャラクターのジャンプ
キャラクターのジャンプ

現時点の問題点

 ここまでのコードには問題があります。キャラクターがジャンプ中にスペースキーを押すと、さらにジャンプを行いキャラクターがどんどん上昇して行ってしまいます。そういうゲームもあるでしょうが、今回は「ジャンプ中は再度上昇することはできない」という仕様にしたいと考えています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ジャンプ中のキャラクターはスペースキーを無効に

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
速習 Unity 2Dゲーム開発連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8029 2014/11/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング