わかゲームスタジオ

ゲーム制作初心者専門学生の備忘録

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