オブジェクトを移動する方法
インスペクター上では自分が直接移動ツールを使って移動させたり、X,Y,Z座標を直接いじって移動させていると思いますがゲームを開始したらそんなことはできないのでスクリプトから移動させることになります。
では一体どうやればいいのか?
簡単な話その直接いじっている部分をスクリプトで記述するだけでいいのです。
具体的にはTransformをいじるのですがスクリプトの書き方はいくつか方法はあります。
- Upload関数から毎フレームごとに数字を更新し移動させる方法。
- InputSystemを利用しキーボードなどからの入力で移動させる方法。
- Rigitbodyコンポーネントを利用し物理演算で移動させる方法。
今回は1番をご紹介いたします。
具体的なやり方
Transformでの移動手段は
transform.position+=new Vector3(1,0,0)*Time.deltaTime;
現在の位置からX座標を毎フレームごとに1ずつ更新される。
Time.deltaTimeは実時間を基準に進めるのでこれがなければ毎フレーム呼ばれ続けるのですんごいスピードで飛んで行ってしまいます。
またお使いのデバイスが全員が全員同じとは限らないのでばらつき防止でよく使うのでいい機会なので覚えて行ってください。
ローカル座標で進める方法
上記の記述はワールド空間基準での移動方法になるのでオブジェクトの向きを考慮していません。
なのでプレイヤーだったら回転させても右いくと指示したら右へ進んでしまうのでこれはいかんという話なのです。
なのでオブジェクト基準で右方向へ進ませたいのなら
transform.position+=transform.right;
という記述をします。
new Vector3ではなくあくまで自分の基準なのでtransformを最初に記述し進みたい方向へ書くだけです。
こうすると180度回転させた状態にしても左へ進むようになります。
主な使いどころはアクションゲームやシューティングゲームで上下左右反転をよくするときに利用します。
ぜひ自分が作ったゲームに合うコード書いてみましょう。
まとめ
移動方法には大きく2つありVector3とtransform.position移動がありゲームの仕様によって使い分けが必要。
他にもRigitbodyを利用した移動方法がありますが物理演算を利用するのでちょっと重くなります。
ですが挙動が現実世界に似たようなことができるようになるのでゲームの種類によって使い分けが必要になります。
ぜひとも挑戦してみてください。