CodeZine(コードジン)

特集ページ一覧

速習 Unity 2Dゲーム開発
~第6回 キャラクターのアニメーション(後編)

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

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

C#で状態を変更する

 Menicamで設定したアニメーションの状態を、C#のプログラムコードから編集していきます。

 キャラクターのアニメーション処理はキャラクタークラス内で行いたいので、CharactorManager.csに処理を記述していくことにします。CharactorManager.csを開き、以下のようにプロパティを追記します。

プロパティを追記
public class CharactorManager : MonoBehaviour {

    // ジャンプしているかどうか
    private bool _isJumping;

    // 左向きかどうか
    private bool _isLeftMove;

    // 停止しているかどうか
    private bool _isStop;

    // アニメーション制御用のAnimatorクラス
    private Animator _animator;

 変数名になんとなく見覚えがあると思います。後で分かりますが今回追加したこれらの変数(_animatorをのぞく)はMenicamで追加したプロパティに対応します。

 続いて、クラス生成時に一度だけ呼ばれるStartメソッドに初期化処理を追記します。

初期化処理の追記
void Start () {
    this._animator = this.GetComponent<Animator>();

    this._isLeftMove = true;
    this._isJumping = false;
    this._isStop = true;
}

 一定間隔で呼び出されるUpdateメソッドにも追記します。

Updateメソッドの追記
void Update () {
    // 自分の速度を取得
    var v = this.rigidbody2D.velocity;

    // 縦方向の速度によってフラグを調整
    // 0.1ずつずらしてあるのは誤差対応のため
    if (v.x < -0.1f)
    {
        this._isLeftMove = true;
        this._isStop = false;
    }
    else if (v.x > 0.1f)
    {
        this._isLeftMove = false;
        this._isStop = false;
    }
    else
    {
        this._isStop = true;
    }

    // Animatorのパラメーターを変更
    this._animator.SetBool("isJump", this._isJumping);
    this._animator.SetBool("isStop", this._isStop);
    this._animator.SetBool("isLeftMove", this._isLeftMove);
}

 CharactorManager.csの編集を終了します。

 GameManager.csにも変更が必要なのでGameManager.csを開き、Updateメソッドを以下のように書き換えます。

GameManagerの修正
void Update () {

    // 左右のキーで左右に移動
    float horizontal = Input.GetAxis("Horizontal");

    // キー入力がありジャンプ中でない場合は左右に移動
    if (horizontal != 0.0f && this._charactorScript.isJumping == false)
    {
        this._moveCharactor(Vector2.right * 10f * horizontal);
    }
    // スペースキーでジャンプ
    // ジャンプ中はスペースキーが押されてもさらに上昇しない
    if (Input.GetKeyDown("space") && this._charactorScript.isJumping == false)
    {
        this._moveCharactor(Vector2.up * 400f);
    }
}

 ジャンプ中に方向キーを押しても力を加えないように変更を加えたのと、前回の解説でスペースキーでキャラクターの向きを変えるようにした修正を削除しました。

実行してみる

 この状態でゲームを実行すると、ジャンプのアニメーションがおかしいことに気が付きます。これはジャンプのアニメーションが最後のコマに達した後、また最初にループしてしまっているのが原因です。

 歩くアニメーションはそれでよいのですが、ジャンプの場合は最後のコマでそのまま停止しておいてほしいのです。

ループの停止

 アニメーションのループを停止するために、Projectウィンドウのjump_leftのアニメーションファイルをダブルクリックして開きます。

アニメーションを編集
アニメーションを編集

 InspectorウィンドウのLoop Timeのチェックを外します。

ループを解除する
ループを解除する

 jump_rightも同様にLoop Timeのチェックを解除します。

 これでキャラクターが正常にジャンプのアニメーションを行うようになりました。

まとめ

 Unityの2Dゲーム開発機能のアニメーション処理を用いてキャラクターを動かす際にアニメーションできるようになりました。アニメーションを入れることでグッとゲームらしさが出てきたと思います。

 次回は、飛び乗れる床などを配置してキャラクターが画面を走り回れるようにします。



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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

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