やりたいことはラジコンみたいな動き
上下のキーで前後ろ移動、左右のキーでPlayerを左右に回転させたい。
上下の移動はPlayerの向いている方角に対して前後させたい。
まずは前後させる
Playerが向いている方角に進ませる処理の書き方に悩んだ。
結局は下記のソースのようにした。
まず、TransformDirectionメソッドを用いてローカル座標をグローバル座標に置き換える。
Playerから見たz座標方向に進めればいいのでx軸、y軸の引数は0、z軸にだけ値をとるようにVector3をインスタンス化しています(22行目)。
次にグローバル座標に設定したspeedとdeleteTimeをかけてplayerのpositionに設定しました(23-25行目)。
左右回転
左右に回転させるにはRotateメソッドを使用。
y軸の引数に左右キーが押下された時に得られる1or-1の値にspeedとdeleteTimeをかけて引数として使用しました。
using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 6f; public float rotateSpeed = 1f; Vector3 direction; void FixedUpdate () { float h = Input.GetAxisRaw ("Horizontal"); float v = Input.GetAxisRaw ("Vertical"); Move (v); Turning (h); } // 上下キーが押されたら void Move (float v) { if(v != 0){ direction = transform.TransformDirection(new Vector3(0.0f , 0.0f , v)); direction *= speed; direction *= Time.deltaTime; transform.position += direction; } } void Turning (float h) { if(h != 0){ transform.Rotate(0 , 100 * Time.deltaTime * rotateSpeed * h , 0); } } }