Unity プレイヤーの向きを変える
今回はプレイヤーの向きを変更したいと思います。
先に前回の記事をご覧ください。
wakagamestudio.hatenablog.jp
Unity ver.2019.3.4f1
①Update文を変更する
//移動方向決定
private Vector3 moveVector;
void Update()
{
//入力値を代入
float hori = Input.GetAxis("Horizontal") >= -inputLimit && Input.GetAxis("Horizontal") <= inputLimit ? 0 : Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical") >= -inputLimit && Input.GetAxis("Vertical") <= inputLimit ? 0 : Input.GetAxis("Vertical");
inputVector = new Vector2( hori, ver);
//カメラの向きから移動方向を決定
moveVector = (Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * inputVector.y + Camera.main.transform.right * inputVector.x) * speed;
//===向き切り替え===//
if (inputVector != Vector2.zero)
{
// キャラクターの向きを進行方向に
transform.rotation = Quaternion.LookRotation(moveVector);
}
}
- 前回FixedUpdateに書いた内容をUpdateに追加します。
以上です。
たったこれだけで回転するようになりました。
前回記事に書いてしまえばよかった。
前回までの全コード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
[Header("リジッドボディ")]
[SerializeField]
private Rigidbody rigidbody;
[Header("移動速度")]
[SerializeField]
private float speed = 15;
[Header("入力制限")]
[SerializeField]
[Range(0, 1)]
private float inputLimit = 0.1f;
//入力値代入用
private Vector2 inputVector;
//移動方向決定
private Vector3 moveVector;
void Update()
{
//入力値を代入
float hori = Input.GetAxis("Horizontal") >= -inputLimit && Input.GetAxis("Horizontal") <= inputLimit ? 0 : Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical") >= -inputLimit && Input.GetAxis("Vertical") <= inputLimit ? 0 : Input.GetAxis("Vertical");
inputVector = new Vector2( hori, ver);
//カメラの向きから移動方向を決定
moveVector = (Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * inputVector.y + Camera.main.transform.right * inputVector.x) * speed;
//===向き切り替え===//
if (inputVector != Vector2.zero)
{
// キャラクターの向きを進行方向に
transform.rotation = Quaternion.LookRotation(moveVector);
}
}
private void FixedUpdate()
{
//移動方向に重力分を足す
rigidbody.velocity = moveVector + new Vector3(0, rigidbody.velocity.y, 0);
}
}