Pengendali Pesawat Luar Angkasa di Unity

Dalam tutorial ini, saya akan menunjukkan cara membuat pengontrol pesawat luar angkasa di Unity.

Mari kita mulai!

Langkah

  • Buat GameObject baru, sebut saja "Spaceship"
  • Pindahkan model Pesawat Luar Angkasa ke dalam objek "Spaceship" dan ubah posisinya menjadi (0, 0, 0)
  • Buat skrip baru, beri nama "SC_SpaceshipController" dan tempel kode di bawah ini di dalamnya:

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);
        }
    }
}
  • Lampirkan skrip SC_SpaceshipController ke objek "Spaceship"
  • Buat GameObject baru, beri nama "CameraPosition" dan pindahkan ke dalam objek "Spaceship"
  • Pindahkan Kamera Utama di dalam objek "CameraPosition" dan ubah posisinya menjadi (0, 0, 0)
  • Sesuaikan posisi objek "CameraPosition" hingga Anda puas dengan hasilnya

  • Pindahkan Kamera Utama ke luar objek "Spaceship"
  • Di SC_SpaceshipController tetapkan Variabel Posisi Kamera, Kamera Utama, dan Akar Pesawat Luar Angkasa (ini harus berupa transformasi model pesawat luar angkasa)

  • Buat Kanvas UI baru (GameObject -> UI -> Canvas)
  • Klik kanan pada objek Canvas -> UI -> Gambar
  • Ubah perataan gambar baru ke kiri atas

  • Tetapkan sprite di bawah ini ke gambar

garis bidik fiksi ilmiah

  • Terakhir, tetapkan gambar yang baru dibuat ke Crosshair Texture di SC_SpaceshipController

Pengontrol Pesawat Luar Angkasa sudah siap. Gunakan mouse untuk melihat sekeliling, A/D untuk memutar sepanjang sumbu Z, dan Tombol Kanan Mouse untuk mempercepat.

Artikel yang Disarankan
Pengendali Pesawat untuk Persatuan
Pengendali Helikopter untuk Persatuan
Pengendali Mobil untuk Persatuan
Menerapkan Sistem Parkour di Unity
Menambahkan Crouching ke FPS Player di Unity
Menambahkan Dukungan Lompat Ganda ke Pengontrol Karakter Platformer 2D di Unity
Cara Membuat Kontrol Derek di Unity