Muskontroller i Unity

I den här handledningen kommer du att lära dig hur du implementerar grundläggande muskontroller i Unity. Vi kommer att täcka detektering av musinmatning, hantering av musklick, musrörelser och interaktion med spelobjekt med hjälp av musen.

Konfigurera projektet

Innan vi börjar koda, låt oss sätta upp ett enkelt Unity-projekt:

  1. Skapa ett nytt Unity-projekt.
  2. Lägg till ett nytt 3D- eller 2D-objekt till scenen (t.ex. en kub eller en sprite).
  3. Skapa ett nytt C#-skript som heter MouseController och anslut det till huvudkameran eller något tomt GameObject.

Detekterar musingång

Unity ger inbyggda metoder för att upptäcka musinmatning. Vi kan använda metoden Input.GetMouseButtonDown för att upptäcka musknappstryckningar.

using UnityEngine;

public class MouseController : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // Left mouse button
        {
            Debug.Log("Left mouse button pressed");
        }

        if (Input.GetMouseButtonDown(1)) // Right mouse button
        {
            Debug.Log("Right mouse button pressed");
        }
    }
}

Hantera musklick

För att hantera musklick på objekt måste vi använda Raycasting. Raycasting låter oss upptäcka om ett musklick korsar något spelobjekt i scenen.

using UnityEngine;

public class MouseController : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                Debug.Log("Hit: " + hit.transform.name);
                // Perform actions on the hit object here
            }
        }
    }
}

Musrörelse

Detektering av musrörelser i Unity kan göras med Input.GetAxis. Vi kan använda axlarna Mouse X och Mouse Y för att få musrörelsen i horisontell och vertikal riktning.

using UnityEngine;

public class MouseController : MonoBehaviour
{
    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        if (mouseX != 0 || mouseY != 0)
        {
            Debug.Log("Mouse moved. X: " + mouseX + " Y: " + mouseY);
        }
    }
}

Interagera med spelobjekt

Låt oss utöka vårt skript för att interagera med spelobjekt. Vi kommer att ändra färgen på ett objekt när det klickas.

using UnityEngine;

public class MouseController : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                Renderer renderer = hit.transform.GetComponent();
                if (renderer != null)
                {
                    renderer.material.color = Random.ColorHSV();
                }
            }
        }

        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        if (mouseX != 0 || mouseY != 0)
        {
            Debug.Log("Mouse moved. X: " + mouseX + " Y: " + mouseY);
        }
    }
}

Slutsats

Vi har täckt grunderna för muskontroller i Unity. Vi lärde oss hur man upptäcker musinmatning, hanterar musklick, spårar musrörelser och interagerar med spelobjekt med hjälp av Raycasting. Dessa koncept kan utökas för att skapa mer komplexa interaktioner i dina Unity-projekt.