CodeZine(コードジン)

特集ページ一覧

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

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/11/17 14:00

 前回はキャラクターを左右に動かす処理を紹介しました。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);
    }
}

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

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

現時点の問題点

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


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

あなたにオススメ

著者プロフィール

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

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

バックナンバー

連載:速習 Unity 2Dゲーム開発

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5