オブジェクトの移動
Input.GetAxis
private float h = Input.GetAxis("Horizontal");
private float v = input.GetAxis("Vertical");
Rigidbody rb.AddForce(h, 0, v); //これに[public speed]を掛け算すると良いかも。
以下も同じ。
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move = new Vector3(h, 0, v);
Rigidbody rb.AddForce(move);
- Horizontal : 横方向
- Vertical : 縦方向
GetKeyDown
if (Input.GetKeyDown(KeyCode.RightArrow)) // 右矢印キーが押されたら
{
Rigidbody_rb.AddForce(Vector3.right); // 右に移動する
}
- 右:RightArrow(右矢印キー) , right
- 左:LeftArrow(左矢印キー) , left
- 前:UpArrow(上矢印キー) , forward
- 後:DownArrow(下矢印キー) , back
- ジャンプ:Space(スペースキー) , up(y軸方向へ移動)
- 基本的には、GetKeyDown を使用するほうが処理が軽くなる (void Update で GetKey だとキーが押されている間は1FPS毎に処理が呼び出されるが、GetKeyDown の場合は一度の処理で済むため) 。
- その他、[ Return (Enterキー) ] などがある。
- GetKey:キーを押し続けているとき
- GetKeyDown:キーを押したとき
- GetKeyUp:キーを離したとき
transform.Translate
transform.Translate (-1.0f,0.0f,0.0f); // 左に移動
AddForce以外にも、transform.Translate を使って移動座標を直接打ち込む方法などがある。この場合、オブジェクトは瞬間移動する。
以下も同じ。
transform.Translate(Vector3.left);
transform.position
transform.position += Vector3.right; // 右に移動
やっていることは transform,Translate と同じなので、置き換え可能。
前方にオブジェクトを移動させ続ける
[void Update] のフィールド内に、以下のコードを書く。
transform.Translate(Vector3.forward);
- transform:インスペクタ内のTransformのこと。
- .Translate:Transform内のPositionを変更する、という意味。
- (Vector3.forward);:前方(z方向)へ進む、という意味。
[forward]のほか、[back] [left] [right] [up] [down] がある。それぞれ、[後ろ(z軸)] [左(x軸)] [右(x軸)] [上(y軸)] [下(y軸)] になる。- ※Update内にコーディングしたため、前方に移動し続ける結果となる。
- ※speedを設定しないと正しく動かない場合がある。その場合は、[ float 型の変数 speed ] などを設定して、以下のコードを書く。
transform.Translate(Vector3.forward * Time.deltaTime * speed);
- Time.deltaTime * speed:1FPS毎の移動距離を指定。
位置によって動作を指定(if文)_引き返す
if (transform.position.z >= 30)
// zが30より大きくなったら(= だと 30 を飛び越えた場合に正常に動かないので >= が望ましい)
{
speed = -speed;
}
- transform.position.z:Transform の position の z 座標を指す。
- speed = -speed:speed(事前に float 型の変数 speed を宣言している)の値を -speed にする。たとえば、speed = 10 なら、speed = -10 にする。