キャラクターの向きを変更するには
Quaternion.LookRotation()
を使用して進む方向へのベクトルを引き渡して回転量を取得して向きを変更する。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
public float speed; //プレイヤーの動くスピード
private Vector3 Player_pos; //プレイヤーのポジション
private float x; //x方向のImputの値
private float z; //z方向のInputの値
private Rigidbody rigd;
void Start()
{
Player_pos = GetComponent<Transform>().position; //最初の時点でのプレイヤーのポジションを取得
rigd = GetComponent<Rigidbody>(); //プレイヤーのRigidbodyを取得
}
void Update()
{
x = Input.GetAxis("Horizontal"); //x方向のInputの値を取得
z = Input.GetAxis("Vertical"); //z方向のInputの値を取得
rigd.velocity = new Vector3(x * speed, 0, z * speed); //プレイヤーのRigidbodyに対してInputにspeedを掛けた値で更新し移動
Vector3 diff = transform.position - Player_pos; //プレイヤーがどの方向に進んでいるかがわかるように、初期位置と現在地の座標差分を取得
if (diff.magnitude > 0.01f) //ベクトルの長さが0.01fより大きい場合にプレイヤーの向きを変える処理を入れる(0では入れないので)
{
transform.rotation = Quaternion.LookRotation(diff); //ベクトルの情報をQuaternion.LookRotationに引き渡し回転量を取得しプレイヤーを回転させる
}
Player_pos = transform.position; //プレイヤーの位置を更新
}
}
参考リンク
強火で進め:[Unity][Unity3d]進行方向にキャラクターの向きを変える
強火で進め:[Unity][Unity3d]キャラクターの移動処理(入力した方向へ移動するタイプ)Add Star