0ここでは下の動画のような、2D横スクロールアクションゲームのキャラクター移動について説明します。この記事はUnity1weekという1週間ゲームジャムで作ったゲームを元にしています。実際の操作感を知りたい場合は以下のリンクからプレイできますので、試してみてください。参考記事ポイントスクリプトの処理手順は以下のとおりです。入力に応じてキャラクターの状態を変更する。状態に応じてアニメーションを変更する。事前準備キャラクターの設定キャラクターには以下のコンポーネントを追加しておいてください。Collider2D(地面との接地判定用)AnimatorColliderを分けているのは、着地後すぐにジャンプしたい場合などに、通常の衝突判定用のColliderだけだと反応が悪かったからです。参考にCollider設定のキャプチャを貼っておきます。ちなみにここで使用しているキャラは以下のリンクから入手できます。4種類を切り替えて表示しています。アニメーションの設定についてはスクリプトの切り替え処理と合わせて後述します。spriteアニメの設定方法がわからない場合は下記リンクなどを参考にしてみてください。地面との接地判定に衝突したオブジェクトのタグを使用しています。同じように動作させたい場合は、地面となるオブジェクトのタグを「Ground」にしておいてください。空中にいるかどうかの判定。空中にいるかどうかの判定。入力を取得しています。入力内容を格納しているだけです。もっているのは、入力方向に応じてキャラクターの向きを変更する処理にも使用するためです。向きの変更については後述する「アニメーションの変更」で説明します。状態の判定は以下のように行なっています。空中にいるかどうかの判定。空中にいるかどうかの判定。状態に応じてアニメーションを変更します。基本的には上記4つの状態に応じた以下のフラグをAnimatorに用意しておき、そのフラグを切り替えることで処理を行っています。trueここでは走行中のアニメーションを右向きのものしか作成していなかったため、上記設定だけでは左に移動するときも右を向いたアニメーションが表示されていました。マイナスの値を与えてspriteを反転させています。もっているのはこの処理のためです。公式マニュアルでは処理が重いため、この方法は推奨されていません。SpriteRendererのflipXをtrueにすることでもspriteは反転させることが可能なので、処理速度が気になる方はそちらを使用してください。この方法ではCollider等は反転しないため、左右対称ではない場合は注意が必要です。SpriteRendererまた、stateEffectという変数に状態に応じて値を設定しています。これはジャンプ中に左右のボタンを押した場合、地上と同様の速度で移動してしまうのを防ぐための変数です。移動処理時に使用しています。state;}}2017.12.06追記Animator側の設定も見せてほしいとご連絡いただいたので、簡単にですが追記します。上図のように、各状態からどの状態にも遷移できるように設定しています。animation遷移の設定はどれも同じなので、例として「待機状態(isIdle)から走っている状態(isRun)」と「走っている状態(isRnu)から待機状態(isIdle)」への遷移の設定のみキャプチャを貼っておきます。デフォルト設定からの変更点は「HasExitTimeのチェックを外す」「FixedDurationにチェックを付ける」「TransitionDurationを0.01にする」の3点です。アニメーションがすぐに切り替わるように設定しています。入力に応じてキャラクターを移動させます。移動し始めは等速移動ではない感じにしたかったので、最初はAddforceで力を加えて、途中から一定速度で移動するような処理にしています。ゲームをプレイしてもらうと分かるのですが、正直ちょっとふわふわした操作感になっているので、この辺りの処理は適宜書き換えてもらったほうがいいかもしれません。いい処理方法をご存知の方は教えてください。いう値を移動時に掛けることで、ジャンプ中の横移動速度に制限を加えています。