Unityでオブジェクトを操作する時にコードを使って動かすということは、アクションゲームなどでは必須だと思います。
Unityで力をかける方法は「velocity」や「AddForce」などを使いますが「オブジェクトを上下に動かす」時と「オブジェクトの上下に動かす」という方法があります。
しかし、オブジェクトが回転していた場合、Unityのビュー画面とオブジェクトの上方向が違う方向になってしまいます。
今回はオブジェクトが回転していたとしても、その「オブジェクトから見て上方向に力をかける」という方法を紹介します。
はじめに
冒頭でも触れましたが以下の2つの画像を比較してみると、オブジェクトの上方向が変わっているのがよくわかります。
この状態で単純に上方向に力をかけたとしても、どちらも上方向に移動します。
1枚目の画像では、上に進んでよいのですが、2枚目の画像では左に進ませたいのに上に進んでしまいます。
この時、Spriteのみのオブジェクトを作り、90°回転させれば上方向に進めることもできますが、その場合オブジェクトが増えてしまいます。
今回紹介するのは、もっと簡単で見栄えもよくなる方法です。
まずは、今まで私が使っていたコードを見ていきましょう。
プレイヤー移動させる
(スペースキーを入力すると上昇)
Vector2(0, 2) もしくは Vector2.up * 2と記述することで力を加えることができるようになっています。
2となっている値を変更することで、加える力の大きさを変更することができので自由に変更してください。
このようにすることで上方向や、下方向へ力をかけることができるようになります。
こちらのコードを使えば、オブジェクトの回転に関わらず上下左右に移動できるということですね。
場合によっては、この処理の方がよいという場合もありますが、今回のようにロケットが上昇するような時は不自然な形になってしまいます。
では、どのようなコードにすればロケットから見て上方向に力をかけることができるようになるのか見ていきましょう。
オブジェクトから見た上方向に移動
先ほど使ったvelocityのコードがあります。
このコードを一部書き換えるだけでオブジェクトから見た上方向に力をかけることができます。
以下のようにコードを書き換えましょう。
このようにするだけで「オブジェクトから見た上方向に力をかける」ことができるようになりました。
加える力の大きさを変えたい時には、transform.up * 2 に書かれた数値を任意のものに変更してください。
完了したら、実際の動作を確認してみましょう。
プレイヤーが左に傾いたら、左斜め上に進むといった動作をしていれば成功です。
まとめ
コードを知らない人には、この2つを使い分けるのは少し大変かもしれません。
ですが、今回のコードは2つを比較してみてもほとんど変わらないので簡単に覚えることができるかと思います。
「プレイヤーを回転させながら進む」というような場合には、今回のコードを使うのが最も簡単ですね。
ぜひ活用してみてください。
【Unity】丸型ゲージを使ってメーターを作る!円形のパワーゲージに使えるかも! - クリアメモリ
ではまた。