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); } }