見出し画像

第2回|スマホで遊べる!Unityジャンプゲーム制作講座 | Playerの左右移動とジャンプ

2-1 前回の復習と今回の課題

この回では、前回作成したPlayerの左右移動に、向きの変更とアニメーションを追加します。

前回の段階では、キーボードやスマホ用の左右ボタンでPlayerを左右に動かすことができました。
ただし、このままだと、Playerが左に進んでも右を向いたままだったり、Idling状態のままで、移動しているのに歩いているように見えなかったりします。

そこで今回は、まずPlayerが進む方向を向くようにします。
そのあと、歩くアニメーションを設定し、動いているときと止まっているときの見た目を切り替えます。

後半では、ジャンプ処理を追加します。
ジャンプゲームでは、地面にいるときだけジャンプできるようにすることが大切です。
この制御を入れないと、空中で何度もジャンプできてしまいます。
そこで、接地判定を作成し、二段ジャンプが起きないようにします。

最後に、スマホ用のジャンプボタンと、Playerが画面外に出すぎないようにする移動制限を追加します。


2-1-1今回作る内容

今回作る内容は、次のとおりです。

・Playerの左右の向きを変える
・歩くアニメーションを作る
・Animatorでidleとwalkを切り替える
・ジャンプ処理を作る
・地面にいるときだけジャンプできるようにする
・二段ジャンプを防ぐ
・ジャンプアニメーションを作る
・スマホ用ジャンプボタンを作る
・Playerの移動範囲を制限する


2-1-2 前回の状態確認

前回は、Heroを左右に動かす処理を作成しました。

キーボードでは、Aキー、Dキー、左矢印キー、右矢印キーで移動できます。
スマホ操作用に作成した左ボタンと右ボタンを押しても、それぞれの方向に移動します。

今回のスタート時点では、HeroControllerに次のような処理がある状態です。

void HeroMove()
{
    float moveX = moveAction.action.ReadValue<Vector2>().x; 
    if(mobileMove != 0f)
    {
        moveX= mobileMove;  //モバイル用の移動方向がある場合はそれを優先
    }
    rb.linearVelocity=new Vector2(moveX * moveSpeed, rb.linearVelocity.y); 
}

このコードで、キーボード入力とスマホボタン入力の両方に対応しています。

今回は、この HeroMove() に処理を追加しながら、Playerの見た目(左右の向きとアニメーション)、およびジャンプ処理を作っていきます。


2-2 Playerの左右移動の修正

2-2-1 Playerの向き

まずは、Playerが進む方向を向くようにします。

現在の状態では、Playerが左に移動しても、右向きのまま動いてしまいます。
これでは少し不自然なので、右に移動するときは右向き、左に移動するときは左向きになるようにします。

作成済みの HeroMove() の中に、次の処理を追加します。
※前半のコメントアウト部分は前回作成済みなので、重複しないように

void HeroMove()
{
   /*記述済み 
    float moveX = moveAction.action.ReadValue<Vector2>().x; 
    if(mobileMove != 0f)
    {
        moveX= mobileMove; 
    }
    rb.linearVelocity=new Vector2(moveX * moveSpeed, rb.linearVelocity.y); 
    */

    if (moveX > 0) //moveXが0より大きい(右方向に移動)
    {
        transform.rotation=Quaternion.Euler(0, 0, 0); //右向きに回転
    }
    else if (moveX < 0)  //moveXが0より小さい(左方向に移動)
    {
        transform.rotation = Quaternion.Euler(0, 180, 0); //左向きに回転
    }
}

moveX は、左右の入力を表す値です。
右に入力しているときは、moveX が 1 になります。
左に入力しているときは、moveX が -1 になります。
何も押していないときは、moveX が 0 になります。

そのため、moveX > 0 のときは右向き、moveX < 0 のときは左向きにします。


Quaternion.Eulerとは

ここで使っている Quaternion.Euler は、オブジェクトの回転を指定するための命令です。

transform.rotation = Quaternion.Euler(0, 180, 0);

この場合、Y軸方向に180度回転させています。

Unityでは、InspectorのRotationを見ると、X:0 Y:180 Z:0 のように、X・Y・Zの角度で表示されています。
このような、人が見て分かりやすい角度の表し方を Euler角 といいます。

一方で、スクリプトから transform.rotation を指定するとき、Unity内部では Quaternion という形式で回転を扱っています。
Quaternionは、回転を正確に扱うための仕組みですが、はじめのうちは中身を深く理解しなくても大丈夫です。

ここから先は

11,996字 / 14画像
この記事のみ ¥ 980

Unityの基礎を学んだ次のステップとして、Androidスマホで遊べるジャンプゲームを全8回で完成させます。 Input System、スマホUI、物理演算、配列による自動配置、Time.deltaTime、三角関数、コルーチン、ステージ管理まで、ゲーム制作で役立つ仕組みを実践的に学べます。

Unityの基本操作やC#の基礎を学んだ方向けの、Androidスマホ対応ジャンプゲーム制作講座です。全8回を順番に進めながら、Input…

よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!