Unity_Lesson

カーソルが邪魔になったり、画面外にカーソルが出てしまうなどの解決方法をいくつか紹介


1. カーソルを画面中央に固定する

画面上でマウスカーソルを動かしてカメラ操作をする際に、カーソルが邪魔になる場合や、画面外に行かないようにするには、カーソルを非表示にして中央に固定し、相対的なマウス移動量を使ってカメラを操作する方法があります。

サンプルコード

using UnityEngine;

public class CameraController : MonoBehaviour
{
    public float sensitivity = 300f;
    private float rotationX = 0f;
    private float rotationY = 0f;

    void Start()
    {
        // カーソルを非表示にしてロックする
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void Update()
    {
        // マウスの移動量を取得
        float mouseX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;

        // カメラの回転を計算
        rotationY += mouseX;
        rotationX -= mouseY;
        rotationX = Mathf.Clamp(rotationX, -90f, 90f); // カメラの上下制限

        // カメラの回転を適用
        transform.localRotation = Quaternion.Euler(rotationX, rotationY, 0f);

        // ESCキーを押したらカーソルロックを解除
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;
        }
    }
}

説明

このコードでは、ESCキーを押すことでカーソルロックを解除し、カーソルを再び表示することができます。


2. カーソルを画面内に制限する

カーソルを表示したまま、画面外に出ないように制限することも可能です。

サンプルコード

using UnityEngine;

public class CursorBoundaries : MonoBehaviour
{
    void Start()
    {
        // カーソルを画面内に制限
        Cursor.lockState = CursorLockMode.Confined;
    }

    void Update()
    {
        // ESCキーで制限解除
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Cursor.lockState = CursorLockMode.None;
        }
    }
}

説明


3. カメラ操作とカーソル制御の切り替え

あるタイミングでカーソルをロックしてカメラ操作に集中し、別のタイミングでカーソル操作に切り替えるといった方法もあります。

サンプルコード

using UnityEngine;

public class ToggleCursorLock : MonoBehaviour
{
    private bool isLocked = true;

    void Start()
    {
        ToggleCursorLockState();
    }

    void Update()
    {
        // スペースキーでカーソルロックを切り替え
        if (Input.GetKeyDown(KeyCode.Space))
        {
            isLocked = !isLocked;
            ToggleCursorLockState();
        }
    }

    void ToggleCursorLockState()
    {
        if (isLocked)
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;
        }
        else
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;
        }
    }
}

説明



まとめ

using UnityEngine;

namespace Often
{
    public class CursorCtrl : MonoBehaviour
    {
        void Start() {
            Cursor.visible = false;
            Cursor.lockState = CursorLockMode.Locked;
        }

        void Update() {
            if (Input.GetKeyDown(KeyCode.Escape)) {
                Cursor.visible = true;
                Cursor.lockState = CursorLockMode.None;
            }
            if (Input.GetMouseButtonDown(0)) {
                Cursor.visible = false;
                Cursor.lockState = CursorLockMode.Locked;
            }
        }
    }
}

対象物のまわりを回るカメラ