Een first-person controller maken in Unity
Deze tutorial begeleidt je door het bouwen van een simpele first-person controller in Unity. De first-person controller laat spelers een 3D-wereld verkennen met vloeiende bewegingen en camerarotatie. We gebruiken basis C#-scripting en Unity's ingebouwde CharacterController-component.
1. De scène opzetten
Begin met het instellen van de basisscèneomgeving voor uw first-person controller:
- Maak in Unity een nieuwe 3D-scène.
- Ga naar GameObject > 3D Object > Plane om een grondoppervlak te maken.
- Pas de schaal van het vliegtuig aan, zodat de speler er makkelijk omheen kan lopen.
- Ga naar GameObject > 3D Object > Cube om obstakels of muren toe te voegen waarmee je kunt interacteren.
2. Het spelerobject toevoegen
Om de speler weer te geven, gebruiken we een capsule-object:
- Ga naar GameObject > 3D Object > Capsule om een capsule aan de scène toe te voegen.
- Plaats de capsule iets boven de grond (bijv. Positie = (0, 1, 0)).
- Hernoem de capsule naar Speler.
- Verwijder het Capsule Collider-component, aangezien de CharacterController botsingen afhandelt.
- Voeg een CharacterController-component toe aan het Player-object door de Player te selecteren, vervolgens op Add Component in de Inspector te klikken en te zoeken naar CharacterController.
3. Het schrijven van het First-Person Controller-script
Laten we nu een script maken om de bewegingen van de speler en de rotatie van de camera te verwerken:
- Klik met de rechtermuisknop in het projectvenster en selecteer Maken > C# Script. Noem het FirstPersonController.
- Koppel het script aan het Player-object door het vanuit het Project-venster naar de Player in de Hiërarchie te slepen.
Open het script en vervang de inhoud door de volgende code:
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
public float moveSpeed = 5f;
public float mouseSensitivity = 2f;
public float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
private Transform cameraTransform;
void Start()
{
controller = GetComponent();
cameraTransform = Camera.main.transform;
cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
cameraTransform.parent = transform; // Attach camera to player
}
void Update()
{
// Player movement
float moveX = Input.GetAxis("Horizontal") * moveSpeed;
float moveZ = Input.GetAxis("Vertical") * moveSpeed;
Vector3 move = transform.right * moveX + transform.forward * moveZ;
controller.Move(move * Time.deltaTime);
// Apply gravity
if (controller.isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
// Camera rotation
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(Vector3.up * mouseX);
cameraTransform.Rotate(Vector3.left * mouseY);
}
}
4. De camera bevestigen
Voor het first-person-perspectief moet de camera aan de speler zijn bevestigd:
- Selecteer de hoofdcamera in de hiërarchie.
- Plaats het iets boven het Player-object (bijv. Y = 1,5).
- Sleep de Camera naar het Player-object in de Hierarchy om het een child van de Player te maken. Dit zorgt ervoor dat het de bewegingen en rotaties van de player volgt.
5. Invoer configureren
Unity's Input Manager gebruikt vooraf gedefinieerde asnamen zoals "Horizontaal" en "Verticaal" voor beweging, evenals "Muis X" en "Muis Y" voor muisinvoer. Deze worden automatisch geconfigureerd, maar u kunt de gevoeligheid aanpassen in Bewerken > Projectinstellingen > Input Manager.
6. Testen van de controller
Nu de first-person controller klaar is, druk je op de afspeelknop om deze te testen:
- Gebruik W, A, S, D om de speler vooruit, achteruit en opzij te bewegen.
- Beweeg de muis om de camera te draaien en rond te kijken.
- Controleer of de zwaartekracht werkt door van verhoogde objecten af te stappen en te kijken of de speler op natuurlijke wijze valt.
7. Verbetering van de controller
Je kunt de first-person controller verder verbeteren door het volgende toe te voegen:
- Sprintfunctionaliteit door de bewegingssnelheid te verhogen wanneer u de Shift-toets ingedrukt houdt.
- Springlogica door te detecteren wanneer de speler op de spatiebalk drukt en een opwaartse snelheid toe te passen.
- Klim- of hurkmechanismen voor complexere interacties tussen spelers en de omgeving.
Conclusie
Met deze basis first-person controller heb je nu een functionele speler-setup voor het verkennen van 3D-omgevingen. Door het script aan te passen en uit te breiden, kun je meer functies en interacties toevoegen om aan de behoeften van je game te voldoen.