やりたいことはラジコンみたいな動き
上下のキーで前後ろ移動、左右のキーで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);
}
}
}
