1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】マウスカーソルを使った視点の移動とカメラ追従の実装のメモ(FPS風)

Last updated at Posted at 2024-05-13

はじめに

 今回はUnityでFPS風の視点移動を実装する方法を説明したいと思います。以下が最終的にイメージしているものです。マウス操作で視点移動とPlayerの向きを変更させ、wasdで移動です。

準備するもの

 まず以下の画像のようにcubeでplayerを作り、そのオブジェクト配下にメインカメラを置きます。(今回はカメラの挙動がわかりやすいようにcubeをplayer配下に置き、その中にMainCameraを置いています。)
スクリーンショット 2024-05-13 17.02.19.png

C#スクリプト

 今回はプレイヤーとカメラに一つずつスクリプトつけようと思います。
以下がプレイヤーにつけるスクリプトです。
ここではプレイヤーの移動と左右の視点移動を実装しています。

player.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour
{
    private float speed=30.0f;

    void Update()
    {
        // Playerの前後左右の移動
        float xMovement = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // 左右の移動
        float zMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; // 前後の移動
        transform.Translate(xMovement, 0, zMovement); // オブジェクトの位置を更新


        //マウスカーソルで左右視点移動
        float mx = Input.GetAxis("Mouse X");//カーソルの横の移動量を取得
        float my = Input.GetAxis("Mouse Y");//カーソルの縦の移動量を取得
        if (Mathf.Abs(mx) > 0.001f) // X方向に一定量移動していれば横回転
        {
            transform.RotateAround(transform.position, Vector3.up, mx); // 回転軸はplayerオブジェクトのワールド座標Y軸

        }
    }
}

注意
public class 〇〇 : MonoBehaviour
〇〇の部分がスクリプト名と異なる場合、エラーの原因となるので注意!

補足

transform.RotateAround(回転の中心, 回転の軸(Vector3.upは(0,1,0)のことなのでy軸を軸としている), 変化量); 

 次にMainCameraにつけるスクリプです。以下がそのスクリプトです。ここでは縦方向にカメラを移動させるための実装を書いています。

camerarotation.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class camerarotation : MonoBehaviour
{
    public GameObject player;//playerのゲームオブジェクトを入れる変数を設定
    void Update()
    {
        float my = Input.GetAxis("Mouse Y");//マウスの縦方向の移動量を取得
                
        if (Mathf.Abs(my) > 0.001f)// Y方向に一定量移動していれば縦回転
        {
            transform.RotateAround(player.transform.position, Vector3.right, -my);
        }
    }
}

注意
MainCameraにスクリプトをつけた後以下のようにplayerオブジェクトをアタッチする
スクリーンショット 2024-05-13 18.00.27.png

補足

transform.RotateAround(player.transform.position, transform.right, -my);

playerを中心としてx軸を回転の軸として回転する。

まとめ

 今回はFPSのような視点を使ったゲームを作ろうと思ったので調べながら実装を行いました。アセットなども使わずに簡単に実装できたので良かったです。これからも学習したことを載せていきます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?