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