[2D] 十字キーでの8方向移動

記事作成 2019年7月
PlayMaker 1.9.0 / Unity 2018.2.6f1

2Dモードでの、キャラクターの移動についてです。
3Dと違って、2Dには標準のキャラクターコントローラがなく、キャラ移動については
苦労している人も多いように思います。

実際、PlayMaker上でも様々な方法があるはずですが、おそらく一番簡単と思われる方法で、
方向キー、ジョイパッドでの8方向移動を実現してみます。

----------------------------------------------
上方から見たシューティング、あるいはRPG風のフィールド移動のようなものへ
使う感じでしょうか。

----------------------------------------------

2Dスプライトを作成します。画像は適当に。


インスペクタで Rigidbody 2D を追加し、Gravity Scale を 0 にします。
これで、重力の影響を受けて落下することを防ぎます。

----------------------------------------------

操作キャラクターに状態遷移を設定します。
作成した状態 「移動」 に、3つアクションを並べます。2つの [Get Axis] で、方向のインプットを
取ります。Multiplier は入力レンジの広さ(ここでは-2~2)の設定ですが、実際、移動スピード
とみなして構いません。(Horizontal、Verticalは文字を打ち込んでください)

次に、[Set Velocity 2d] で入力値に応じた力を、キャラクターに設定します

当然、入力値を格納するFloat変数を作っておきます。

これで、方向キー、WASD、ジョイパッドで 8方向に移動します。

□ キーとジョイパッドの操作感の違い。
実際に操作してみるとわかるのですが、方向キー、WASDでの移動は、Multiplier の設定値
まで、数値は徐々に変化し(-2~2)、ジョイパッドでの操作では一気に数値が切り変わります。
(-2、0、2)。
つまり、キー操作では、設定スピードまで加速しつつ変化し、ジョイパッドではボタンに応じて
常に一定の設定スピードで切り替わります。
これは、unityの設定なので、仕方ないのです。キー操作で即座に切り替えるには Axisの+ -
で判定して、数値を入れるとか、何かしらの工夫が必要です。

(追記 2020 / 08 / 24 )
エコシステムで入手できる、[ GetAxisRaw ] アクションを使うと、キーボードの方向指定でも
( -1 0  1 )のように値を取れ、途中の「徐々に変化」をなくすことができます。
エコシステムには他にも [ AxisRawEvent ] など (Axis) (Raw) の検索で見つかるアクションが
あります。[PM] Ecosystem (エコシステム参考記事)

----------------------------------------------
@ おまけ
 このままでもいいのですが、十字キーでキャラクターを操作する で使った方法で
スピードに変化をつけてみます。

「移動」 からマウス左ボタンダウンで、「もっと速く移動」 へ遷移します。


「もっと速く移動」 は 「移動」 をコピーしたものですが、下線の部分が違います。
移動スピードが上がり、左ボタンアップで 「移動」に戻ります。

----------------------------------------------
このように操作できるでしょうか。


移動方向に応じて画像を切り替えたい場合は、Axisからの値、入力キー、もしくは
操作キャラの Velocity などを Get して分岐。画像(あるいはアニメーション)設定
という流れになるかと。いずれ記事にするかも。

参考記事 [2D] スプライトの切り替え 

また、2Dモードでの接触やオブジェクトの移動などは、3Dと同じ要領でできます。
これまで3D用の記事内で使ったアクション [Trigger Event] などには [Trigger2D Event]
等、対になるような2D用のアクションがあり、コンポーネントもまた 「Rigidbody 2D」など
分かりやすいです。

今回のHowtoは、公式フォーラムの投稿にあったものです。公式フォーラムは参考になる
トピックも多いので覗いてみると面白いかもしれません。
https://hutonggames.com/playmakerforum/index.php?topic=18361.0

0 件のコメント:

コメントを投稿