適当に配置したブロックのなかを、自由に移動できるようにしてみます。
移動用オブジェクト(Player)の配置
まずはPlayerとなるキューブを作ります。
ちょっと縦長にして、色を青くして。
方向がわかるように、Z軸方向にクチバシをつけました。
これをカメラから見て画面の真ん中に配置します。
このPlayerを、ひとまずラジコン方式で操作してみます。
上下で前後移動、左右で回転というそれです。
このほうが移動と回転がわかりやすいかなと思いますので。
Scripts/PlayerController.csを作成して、Playerに追加。
Update()に次のように記述します。
// Update is called once per frame void Update () { // ゲームパッドからの入力 // 前後に移動 gameObject.transform.Translate(0, 0, Input.GetAxis("Vertical") * 0.1f); // 左右に回転 gameObject.transform.Rotate(0, Input.GetAxis("Horizontal"), 0); }
今回の移動はpositionを書き換えるのではなく、Translateを使用して移動距離を加算しています。Verticalに0.1fを掛けているのは、そのままの値だと大きすぎたから。
positionにVector3を入れる方法だと、x, y, zそれぞれに移動量を計算してやらないといけないので、Translateで移動量だけ指定するのが簡単。
また前後の移動はオブジェクトの回転状態に依存して計算されるため、ローカル座標で決定する必要があります。これもTranslateだとデフォルトでローカル座標で計算してくれます。
回転も同様にローカル軸で。
これで実行すると、Playerが移動できるようになります。
移動できる、押せる。
落ちる…
カメラの移動
ここまでだとカメラが固定されていますが、これをPlayerの動きに合わせてみたいと思います。
まず現在のカメラであるMain Cameraを、
Playerの下に移動します。
これだけで、カメラはPlayerの動きについていくようになります。
親オブジェクト(Player)のローカル座標に入っているためです。
落ちているのか浮いているのかわからない感覚に襲われる。
ちょっとカメラの位置を調整して、Player視点になるようにしてみます。
位置調整は他のオブジェクトと同じように、Sceneビューで移動ツールを使って行います。
そのとき右下にカメラの描画内容が表示されるので、それを参考にしながら。
だいたいこのあたりで。
それで実行すると、Player目線で動くのがわかります。
飛んでいるのも落ちているのも同じことだわ…