Unity でスムーズなマウスの動きを実現する方法

スムーズなマウスの動きは、ゲーム開発の重要な要素であり、全体的なユーザー エクスペリエンスの向上に役立ちます。 スムーズなマウスの動きを実装すると、ゲームのカメラやプレーヤーのコントロールがより滑らかで応答性が高くなり、洗練された没入感のあるゲームプレイ エクスペリエンスを実現できます。 このチュートリアルでは、Unity でスムーズなマウスの動きを設定する方法を、C# のステップ バイ ステップの手順とコード例を使用して説明します。 また、ゲームにこの機能を実装する理由についても説明します。

スムーズなマウスの動きを実装する理由

ゲームでスムーズなマウスの動きが重要な理由はいくつかあります。

  • ユーザー エクスペリエンスの向上: スムーズなコントロールにより、プレイヤーは自分のアクションをよりコントロールできていると感じることができます。これは、特に一人称または三人称のゲームで没入感を高めるために不可欠です。
  • 精度の向上: マウスの動きを微調整することで、より正確なカメラコントロールが可能になります。これは、シューティング ゲームや、慎重に狙いを定める必要があるゲームでは非常に重要です。
  • 洗練された外観と感触: ゲームがよりプロフェッショナルで洗練された感じになり、プレイヤーを維持し、夢中にさせるのに不可欠です。
  • 乗り物酔いを軽減: ぎくしゃくしたり、敏感すぎるカメラの動きは、プレイヤーに不快感や乗り物酔いを引き起こす可能性があります。マウスの動きをスムーズにすると、このリスクを軽減できます。

スムーズなマウス移動を設定する Unity

Unity でスムーズなマウスの動きを作成する手順を確認してみましょう。

ステップ1: 新しいスクリプトを作成する

まず、マウスの動きを制御する新しい C# スクリプトを作成します。このスクリプトに MouseLook のような名前を付けることができます。

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        // Lock the cursor in the middle of the screen
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get mouse movement input
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // Invert the Y-axis for a more natural control feel
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // Rotate the camera around the X-axis (up and down)
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // Rotate the player object around the Y-axis (left and right)
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

このコードでは:

  • mouseSensitivity はマウス入力の感度を制御します。
  • playerBody は、マウスの水平移動に合わせて Y 軸に沿って回転するプレーヤーのトランスフォームを表します。
  • xRotation 変数には現在の垂直回転 (上と下) が格納され、過度の回転を防ぐために -90 度から 90 度の間に固定されます。
  • マウス カーソルがゲーム ウィンドウの外に出ないように、マウス カーソルを画面の中央に固定します。

ステップ2: スクリプトをカメラにアタッチする

スクリプトの準備ができたので、Unity シーンに移動し、MouseLook スクリプトをカメラ (例: Main Camera オブジェクト) にアタッチします。

次に、プレーヤー オブジェクト (通常は、キャラクター コントローラーまたはプレーヤーを表す空のゲーム オブジェクト) をインスペクターのスクリプトの Player Body フィールドにドラッグして、playerBody フィールドを割り当てます。

ステップ3: マウスの感度を調整する

必要な制御レベルを実現するには、mouseSensitivity の値を試すことができます。適切な開始点は 100 ですが、必要な精度レベルに応じて、この値を上げたり下げたりすることができます。

ステップ4: 入力の滑らかさの処理

さらにスムーズな動きにするには、マウス入力値に補間を適用します。これにより、カメラが 1 つの位置から次の位置にジャンプするのではなく、各フレーム間でスムーズに遷移します。これを実装する方法の例を次に示します。

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;
    private Vector2 smoothInputVelocity;
    public float smoothTime = 0.1f;
    private Vector2 currentMouseDelta;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get raw mouse input
        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;

        // Smooth the mouse input
        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);

        xRotation -= currentMouseDelta.y * Time.deltaTime;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
    }
}

この更新バージョンでは、Vector2.SmoothDamp を使用したスムージングが導入されています。smoothTime 変数は、遷移の滑らかさを制御します。値が小さいほど動きの応答性が高くなり、値が大きいほど動きが遅くなり、緩やかになります。

ステップ5: テストと微調整

スクリプトを配置したら、ゲームをテストし、マウスの動きをどの程度スムーズにしたいかに基づいて感度とスムージングの値を調整します。また、クランプ角度を調整して、カメラの動きの自由度を増減することもできます。

結論

Unity プロジェクトにスムーズなマウス移動を実装すると、正確で滑らかなカメラ制御が提供され、プレイヤーのエクスペリエンスが大幅に向上します。このチュートリアルでは、基本的なマウス移動システムの設定と、スムージング技術による強化について説明しました。