Musekontroller i Unity

I denne opplæringen lærer du hvordan du implementerer grunnleggende musekontroller i Unity. Vi vil dekke deteksjon av musinndata, håndtering av museklikk, musebevegelse og samhandling med spillobjekter ved hjelp av musen.

Sette opp prosjektet

Før vi begynner å kode, la oss sette opp et enkelt Unity-prosjekt:

  1. Opprett et nytt Unity-prosjekt.
  2. Legg til et nytt 3D- eller 2D-objekt til scenen (f.eks. en Cube eller en Sprite).
  3. Lag et nytt C#-skript kalt MouseController og fest det til hovedkameraet eller et hvilket som helst tomt GameObject.

Oppdager museinngang

Unity gir innebygde metoder for å oppdage museinndata. Vi kan bruke Input.GetMouseButtonDown-metoden for å oppdage museknapptrykk.

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

Håndtere museklikk

For å håndtere museklikk på objekter, må vi bruke Raycasting. Raycasting lar oss oppdage om et museklikk krysser noen spillobjekter 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
            }
        }
    }
}

Musebevegelse

Å oppdage musebevegelser i Unity kan gjøres ved å bruke Input.GetAxis. Vi kan bruke Mus X og Mus Y aksene for å få musebevegelsen i horisontal og vertikal retning.

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

Samhandling med spillobjekter

La oss utvide skriptet vårt til å samhandle med spillobjekter. Vi vil endre fargen på et objekt når det klikkes.

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

Konklusjon

Vi har dekket det grunnleggende om musekontroller i Unity. Vi lærte å oppdage museinndata, håndtere museklikk, spore musebevegelser og samhandle med spillobjekter ved hjelp av Raycasting. Disse konseptene kan utvides for å skape mer komplekse interaksjoner i Unity-prosjektene dine.