みなさん、こんにちは。
最近、方向キー入力でキャラクターを移動させる方法を学んだので、今回はそれについてお話したいと思います。
ここで必要なのが物理演算です。
物理演算はインスペクタにRigidBodyコンポーネントを追加することで使うことができます。
そして動きを指定するスクリプトを用意したら準備完了です。
方向キー入力からキャラクターを移動させるコード。
こんな感じになりました。
まずは自分自身のRigidBodyを取得するためにGetComponentを使います。
私はこれを書き忘れることが多いです。注意しないと…
そして方向キー入力を使うために何と言っても大切なのがUpdate関数の欄のコード2つ。
x = Input.GetAxisRaw(“Horizontal”);
z = Input.GetAxisRaw(“Vertical”);
GetAxisRawを使うことによって移動量を-1.0~1.0の数値で取得する関数です。
Horizontalとすることで横方向へ移動し、
Verticalとすることで縦方向へ移動することができます。
それぞれX軸、Z軸に対応しているので、代入する変数もXとZにしました。
rb.velocity = new Vector3(x, 0, z);
最後にこの関数に先ほどのXとZを入れれば完了。
しっかり動いているのがわかります。
おかげで一気にゲームらしくなりましたね。
Velocityは初めて出てきた単語だったので色々調べてみた結果、「速度ベクトル」というそうです。
しかし、移動を目的でこのvelocityを使うのはあまり推奨されていないそう。
物体の質量や重力を無視していきなり速度が変化するため、非現実的な挙動になるからとかなんとか…
本来はAddForceなどを利用するのいいらしいですが、まだちょっとあまり理解できないので、
とりあえず今は後回しにして勉強を進めていきたいと思います。
ただ操作の快適さを考えた場合、厳密に質量や重力を考慮する必要があるかといえばそれも微妙なところかなとは思います。
車など乗り物が徐々に加速していく動きをリアルに作る場合は必要かもしれませんが、
私たちが操作するキャラクターなどのリアルすぎる動きは逆にストレスに感じてしまう場合もあります。
特にオープンワールドなどフィールドが広く移動時間が多いタイプのゲームの場合、
多少非現実的な挙動の方が疲れずに長時間プレイし続けられる気がします。
ケースバイケースでしっかりと使い分けられるのが理想ですね!
ちなみに皆さんもおそらく嫌いなあの黒くて平べったい虫は止まっている状態からの初速が一番早いらしいので、Velocityを使ってもうまく再現できるのかなと執筆しながら思ったりしました(笑)