キブンログ

芸工祭ゲーム製作に向けて自分用のメモとか書くために作りました 三日坊主にならないように祈って下さい

プレイヤーの移動(2)

プレイヤーが移動方向を向くようにする&カメラも少しそっち向くようにする。

単純に移動方向と同じ向きに回転すればいいんじゃね!?と思ったので移動に使ったキーボード入力の値x,yをそのままtransform.Rotateにぶち込みます。

 

transform.Rotate(0, x*rotSpeed, y*rotSpeed);

 

rotSpeedは回転する速度を管理する変数。

 

これで回転はするんですが、一回回転したら戻らないので移動し続けるとわけわかんない方向向きながら動き回ることになります。

最初の方向に戻すのどうしたもん調べたら、Quaternion.Slerpってめっちゃ便利なメソッドあるらしい

プレイヤーの移動(1)

矢印キーでプレイヤーを画面の上下左右(x, y方向)に動かします。スターフォックスみたいな操作にしたい。

キーを離した瞬間ピタッと止まるのは気持ち悪いので、慣性のあるなめらかな静止にしないといけません。rigidbodyに力を加えて動かすやり方で良いっぽい。

 

Player.cs

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

 public float speed = 10;

 void Update () {

  float x = Input.GetAxisRaw("Horizontal");
  float y = Input.GetAxisRaw("Vertical");

  Rigidbody rigidbody = GetComponent<Rigidbody>();
  rigidbody.AddForce(0, y * speed, x * speed);

 }
}

 

このままだと矢印キーを離しても止まれずに滑っていってしまうので、rigidbodyのDrag(抵抗)を増やします。2くらいが丁度良さげ。

オブジェクトがxyz方向どこ向いてんのか良くわかんないのでAddForceへの引数テキトーですね……

とりあえず動作したけど賢いやり方がある気がします。

 

ここまではまあ良いとして、あとは

・プレイヤーが移動方向に体を向ける

・カメラがプレイヤーの移動方向に少し寄る

をどう実装するか考えます。