Hur man skapar en smidig musrörelse i Unity

Smidig musrörelse är en viktig aspekt av spelutveckling som hjälper till att förbättra den övergripande användarupplevelsen. Genom att implementera mjuka musrörelser kan du få spelets kamera- eller spelarkontroller att kännas mer flytande och lyhörda, vilket resulterar i en polerad och uppslukande spelupplevelse. I den här handledningen kommer vi att gå igenom hur du ställer in smidiga musrörelser i Unity, med steg-för-steg-instruktioner och kodexempel i C#. Vi kommer också att diskutera möjliga skäl till varför du skulle vilja implementera den här funktionen i dina spel.

Varför implementera Smooth Mouse Movement?

Här är några anledningar till varför smidiga musrörelser är viktiga i spel:

  • Förbättrad användarupplevelse: Smidiga kontroller hjälper spelaren att känna mer kontroll över sina handlingar, vilket är viktigt för att fördjupa sig, särskilt i förstapersons- eller tredjepersonsspel.
  • Förbättrad precision: Finjustering av musrörelser möjliggör mer exakta kamerakontroller, vilket är avgörande i skjutspel eller andra spel som involverar noggrann sikte.
  • Polerat utseende och känsla: Det gör att spelet känns mer professionellt och polerat, vilket är viktigt för att behålla spelare och hålla dem engagerade.
  • Minskar åksjuka: Rystande eller alltför känsliga kamerarörelser kan orsaka obehag eller åksjuka för spelare. Jämna musrörelser kan bidra till att minska denna risk.

Ställa in Smooth Mouse Movement in Unity

Låt oss gå igenom stegen för att skapa mjuka musrörelser i Unity.

Steg 1: Skapa ett nytt skript

Skapa först ett nytt C#-skript som styr musrörelsen. Du kan namnge det här skriptet ungefär som 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);
    }
}

I denna kod:

  • mouseSensitivity styr hur känslig musinmatningen är.
  • playerBody representerar spelarens transformation, som roterar längs Y-axeln för horisontell musrörelse.
  • Variabeln xRotation lagrar den aktuella vertikala rotationen (upp och ner), och den är klämd mellan -90 och 90 grader för att förhindra överrotation.
  • Vi låser muspekaren till mitten av skärmen för att undvika att markören flyttar sig ut ur spelfönstret.

Steg 2: Bifoga skriptet till kameran

Nu när skriptet är klart, gå till din Unity-scen och bifoga MouseLook-skriptet till din kamera (t.ex. Main Camera-objektet).

Tilldela sedan playerBody-fältet genom att dra spelarobjektet (vanligtvis karaktärskontrollern eller ett tomt spelobjekt som representerar spelaren) till skriptets Player Body-fält i Inspector.

Steg 3: Justera muskänslighet

Du kan experimentera med mouseSensitivity-värdet för att uppnå den kontrollnivå du vill ha. En bra utgångspunkt är 100, men du kan justera den högre eller lägre beroende på önskad precisionsnivå.

Steg 4: Hantera inmatningsjämnhet

För ännu mjukare rörelser kan du använda interpolation på musens inmatningsvärden. Detta säkerställer att kameran övergår smidigt mellan varje bildruta, snarare än att hoppa från en position till nästa. Här är ett exempel på hur man implementerar det:

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);
    }
}

Denna uppdaterade version introducerar utjämning med Vector2.SmoothDamp. Variabeln smoothTime styr hur smidig övergången ska vara. Lägre värden gör rörelsen mer responsiv, medan högre värden gör den långsammare och mer gradvis.

Steg 5: Testning och finjustering

När du har skriptet på plats, testa spelet och justera värdena för känslighet och utjämning baserat på hur smidig du vill att musrörelsen ska vara. Du kan också justera fastspänningsvinkeln för att ge mer eller mindre frihet för kamerarörelser.

Slutsats

Genom att implementera mjuka musrörelser i ditt Unity-projekt kan du förbättra spelarupplevelsen avsevärt genom att erbjuda exakt och flytande kamerakontroll. Denna handledning ledde dig genom att ställa in ett grundläggande musrörelsesystem och förbättra det med utjämningstekniker.