第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は、回転を正確に扱うための仕組みですが、はじめのうちは中身を深く理解しなくても大丈夫です。

ここから先は

Unityの基本操作やC#の基礎を学んだ方向けの、Androidスマホ対応ジャンプゲーム制作講座です。全8回を順番に進めながら、Input…
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!
