Unity 3Dでの一人称視点の移動と視点の操作方法


  1. キーボードを使用した基本的な移動と視点操作:
    • プレイヤーキャラクターの移動には、CharacterControllerコンポーネントを使用します。以下のコード例は、WASDキーを使って前後左右に移動し、マウスの移動によって視点を回転させる方法です。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float mouseSensitivity = 3f;
    private CharacterController controller;
    private float verticalRotation = 0f;
    private void Start()
    {
        controller = GetComponent<CharacterController>();
        Cursor.lockState = CursorLockMode.Locked;
    }
    private void Update()
    {
        // プレイヤーの移動
        float moveSideways = Input.GetAxis("Horizontal") * moveSpeed;
        float moveForward = Input.GetAxis("Vertical") * moveSpeed;
        Vector3 movement = new Vector3(moveSideways, 0, moveForward);
        movement = transform.rotation * movement;
        controller.Move(movement * Time.deltaTime);
        // プレイヤーの視点の回転
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
        verticalRotation -= mouseY;
        verticalRotation = Mathf.Clamp(verticalRotation, -90f, 90f);
        transform.localRotation = Quaternion.Euler(verticalRotation, 0f, 0f);
        transform.Rotate(Vector3.up * mouseX);
    }
}
  1. マウスの動きによる滑らかな視点回転:
    • 上記のコードでは、マウスの移動によって視点を回転させていますが、これは少し硬直した感じがします。以下のコード例では、マウスの動きをスムーズに補間することで、より自然な視点回転を実現しています。
using UnityEngine;
public class SmoothMouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;
    private float xRotation = 0f;
    private void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }
    private void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

これらはUnity 3Dで一人称視点の移動と視点操作を実装するための基本的な方法です。必要に応じて、さらに機能を追加したり、マウスの感度や移動速度を調整したりすることができます。