コライダの設定を行って以降約一週間ほど期間が空いてしまいました・・・。
もう少し短いスパンでアプリ開発が出来ればいいと思う今日この頃です。
嘆いていても始まらないので、とりあえず先に進めていきます!
プレイヤーをジャンプさせるスクリプトの作成
前回はコライダを追加してプレイヤーと足場との隙間を埋める作業を行っていました。
次は、プレイヤーが移動してジャンプする処理を作成したいと思います。
Physicsを使ってプレイヤーを移動させる場合は、座標を変更するのではなく、プレイヤー自身に力を加えることで移動させます。Physicsが計算してくれますからね。
それでは、スクリプトを作ります。
こんな感じでちょっと長いスクリプトになりましたが1つ1つ説明していきますね。
まず、プレイヤーに力を加える為に、Rigidbody2DコンポーネントのAddForceメソッドを使います。
Rigidbody2Dコンポーネントの持っているメソッドを使う為に、13行目でGetComponentを使ってRigidbody2Dコンポーネントを取得しています。
とりあえず、サンプルとしてスペースキーを押すとジャンプするようにしているので、18行目にてGetKeyDownメソッドを使ってスペースキーが押されたかチェックします。
スペースキーが押されたらAddForceメソッドより上方向に力が加わります。この処理でジャンプするように見えます。
ジャンプする高さは、transform.up(上方向ベクトル)にjumpの値を掛けるようにします。
7行目にてジャンプの初期値を「700.0f」にしていますが、この値を増やすとジャンプする高さが上がり、逆に減らすとジャンプする高さが低くなります。
プレイヤーを左右に移動させるための処理ですが、ジャンプする場合と同じようにAddForceメソッドを使って左右に力を加えます。
右に移動する場合はX方向に、左に移動する場合は-X方向ですね。
右矢印キーが押された場合は23行目でkeyに「1」を代入し、左矢印キーが押された場合は24行目でkeyに「-1」を代入します。
どちらのキーも押されていない場合は、プレイヤーを静止させる必要があるので22行目でkeyを0にしておきます。
26行目でプレイヤーの速度に関する処理を記述していますが、このままだと力が加わりすぎてプレイヤーがどんどん加速してしまいます。
加速を阻止する為に、プレイヤーの移動距離を予め指定したmaxspeed(最高速度)より速い場合は力を加えないようにします。
33行目以降をコメントアウトしていますが、これはプレイヤーの向きを変えるスクリプトです。
私の場合は、左右対称の画像を使っているのでコメントアウトしていますが、そうじゃない場合は画像が反転しませんので、左右どちらかに移動する際に体の向きが一致しません。
それを解消するために33行目以降のスクリプトが必要になります。
プレイヤーの画像を反転させるには、画像のX方向の拡大率を「-1」倍にします。
TransformコンポーネントのLocalScale変数の値を変更することで拡大率が変わります。
今回は、key変数を使って右矢印が押された場合はX方向に1倍、左矢印が押された場合はX方向に-1倍といった感じです。
ただし、この方法だとプレイヤーのScaleのデフォルト値が「1,1,1」ではない場合は、左右キーを押した際にプレイヤーのサイズが大きくなったり小さくなるので注意が必要です。
ここまで出来たらスクリプトを保存して実行してみましょう。
画面から消えるぐらいジャンプしていますね。
jumpの値を小さくしたいところですが、動きがふわふわした感じになりジャンプしているように見えないんですよね。
どうするのかというと、jumpの値は変えずにプレイヤーにかかる重力の値を変更します。
プレイヤーの重力を変更する
プレイヤーを選択してインスペクターからRigidbody2D項目のGravity Scaleを「3」ぐらいに変更してみましょう。
これで、重力を3倍にしたのでキレのある動きに見えます。ゲームを実行して確認してみます。
こんな感じですね。どっしりとしていてぴょんぴょんとジャンプしているように見えると思います。
なんとかプレイヤーの基本的な動作を実装することが出来ました!今回はこの辺で。