Controllore dell'astronave nell'unità

In questo tutorial, mostrerò come creare un controller di astronave in Unity.

Cominciamo!

Passi

  • Posiziona il modello dell'astronave nella tua scena

  • Crea un nuovo GameObject, chiamalo "Spaceship"
  • Sposta il modello dell'astronave all'interno dell'oggetto "Spaceship" e cambia la sua posizione in (0, 0, 0)
  • Crea un nuovo script, chiamalo "SC_SpaceshipController" e incolla il codice sottostante al suo interno:

SC_SpaceshipController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]

public class SC_SpaceshipController : MonoBehaviour
{
    public float normalSpeed = 25f;
    public float accelerationSpeed = 45f;
    public Transform cameraPosition;
    public Camera mainCamera;
    public Transform spaceshipRoot;
    public float rotationSpeed = 2.0f;
    public float cameraSmooth = 4f;
    public RectTransform crosshairTexture;

    float speed;
    Rigidbody r;
    Quaternion lookRotation;
    float rotationZ = 0;
    float mouseXSmooth = 0;
    float mouseYSmooth = 0;
    Vector3 defaultShipRotation;

    // Start is called before the first frame update
    void Start()
    {
        r = GetComponent<Rigidbody>();
        r.useGravity = false;
        lookRotation = transform.rotation;
        defaultShipRotation = spaceshipRoot.localEulerAngles;
        rotationZ = defaultShipRotation.z;

        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void FixedUpdate()
    {
        //Press Right Mouse Button to accelerate
        if (Input.GetMouseButton(1))
        {
            speed = Mathf.Lerp(speed, accelerationSpeed, Time.deltaTime * 3);
        }
        else
        {
            speed = Mathf.Lerp(speed, normalSpeed, Time.deltaTime * 10);
        }

        //Set moveDirection to the vertical axis (up and down keys) * speed
        Vector3 moveDirection = new Vector3(0, 0, speed);
        //Transform the vector3 to local space
        moveDirection = transform.TransformDirection(moveDirection);
        //Set the velocity, so you can move
        r.velocity = new Vector3(moveDirection.x, moveDirection.y, moveDirection.z);

        //Camera follow
        mainCamera.transform.position = Vector3.Lerp(mainCamera.transform.position, cameraPosition.position, Time.deltaTime * cameraSmooth);
        mainCamera.transform.rotation = Quaternion.Lerp(mainCamera.transform.rotation, cameraPosition.rotation, Time.deltaTime * cameraSmooth);

        //Rotation
        float rotationZTmp = 0;
        if (Input.GetKey(KeyCode.A))
        {
            rotationZTmp = 1;
        }
        else if (Input.GetKey(KeyCode.D))
        {
            rotationZTmp = -1;
        }
        mouseXSmooth = Mathf.Lerp(mouseXSmooth, Input.GetAxis("Mouse X") * rotationSpeed, Time.deltaTime * cameraSmooth);
        mouseYSmooth = Mathf.Lerp(mouseYSmooth, Input.GetAxis("Mouse Y") * rotationSpeed, Time.deltaTime * cameraSmooth);
        Quaternion localRotation = Quaternion.Euler(-mouseYSmooth, mouseXSmooth, rotationZTmp * rotationSpeed);
        lookRotation = lookRotation * localRotation;
        transform.rotation = lookRotation;
        rotationZ -= mouseXSmooth;
        rotationZ = Mathf.Clamp(rotationZ, -45, 45);
        spaceshipRoot.transform.localEulerAngles = new Vector3(defaultShipRotation.x, defaultShipRotation.y, rotationZ);
        rotationZ = Mathf.Lerp(rotationZ, defaultShipRotation.z, Time.deltaTime * cameraSmooth);

        //Update crosshair texture
        if (crosshairTexture)
        {
            crosshairTexture.position = mainCamera.WorldToScreenPoint(transform.position + transform.forward * 100);
        }
    }
}
  • Allega lo script SC_SpaceshipController all'oggetto "Spaceship"
  • Crea un nuovo GameObject, chiamalo "CameraPosition" e spostalo all'interno dell'oggetto "Spaceship"
  • Sposta la videocamera principale all'interno dell'oggetto "CameraPosition" e cambia la sua posizione in (0, 0, 0)
  • Modifica la posizione dell'oggetto "CameraPosition" finché non sei soddisfatto del risultato

  • Sposta la videocamera principale all'esterno dell'oggetto "Spaceship".
  • In SC_SpaceshipController assegna le variabili Camera Position, Main Camera e Spaceship Root (questa dovrebbe essere una trasformazione di un modello di astronave)

  • Crea una nuova UI Canvas (GameObject -> UI -> Canvas)
  • Fare clic con il tasto destro sull'oggetto Canvas -> UI -> Immagine
  • Cambia l'allineamento di una nuova immagine in alto a sinistra

  • Assegna lo sprite qui sotto all'immagine

mirino fantascientifico

  • Infine, assegna l'immagine appena creata a Crosshair Texture in SC_SpaceshipController

Il controller dell'astronave è pronto. Usa il mouse per guardarti intorno, A/D per ruotare lungo l'asse Z e il pulsante destro del mouse per accelerare.

Articoli suggeriti
Controllore di elicottero per Unity
Aggiunta del supporto per il doppio salto a un controller di personaggi platform 2D in Unity
Come eseguire il controllo della gru in Unity
Controller per auto per Unity
Controller del personaggio Come aggiungere la capacità di spingere corpi rigidi in Unity
Controller aereo per Unity
Implementazione del sistema Parkour in Unity