Unity'de Uzay Gemisi Kontrolörü

Bu derste Unity'te nasıl uzay gemisi kontrolcüsü yapılacağını göstereceğim.

Hadi başlayalım!

Adımlar

  • Yeni bir GameObject oluşturun, onu çağırın "Spaceship"
  • Uzay Gemisi modelini "Spaceship" nesnesinin içine taşıyın ve konumunu (0, 0, 0) olarak değiştirin
  • yeni bir komut dosyası oluşturun, onu "SC_SpaceshipController" olarak adlandırın ve içine aşağıdaki kodu yapıştırın:

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);
        }
    }
}
  • SC_SpaceshipController betiğini "Spaceship" nesnesine ekleyin
  • Yeni bir GameObject oluşturun, onu "CameraPosition" olarak adlandırın ve "Spaceship" nesnesinin içine taşıyın
  • Ana Kamerayı "CameraPosition" nesnesinin içine taşıyın ve konumunu (0, 0, 0) olarak değiştirin
  • Sonuçtan memnun kalana kadar "CameraPosition" nesnesinin konumunu değiştirin

  • Ana Kamerayı "Spaceship" nesnesinin dışına taşıyın
  • SC_SpaceshipController'da Kamera Konumu, Ana Kamera ve Uzay Gemisi Kökü (bu, bir uzay gemisi modelinin dönüşümü olmalıdır) değişkenlerini atayın

  • Yeni bir UI Canvas oluşturun (GameObject -> UI -> Canvas)
  • Canvas nesnesine sağ tıklayın -> Kullanıcı Arayüzü -> Resim
  • Yeni bir görüntünün hizalamasını sol üst tarafa doğru değiştirme

  • Aşağıdaki hareketli grafiği görüntüye atayın

bilim kurgu artı işareti

  • Son olarak, yeni oluşturulan görüntüyü SC_SpaceshipController'da Artı İşareti Dokusuna atayın.

Uzay gemisi kontrolörü hazır. Etrafınıza bakmak için fareyi, Z ekseni boyunca döndürmek için A/D'yi ve hızlanmak için Sağ Fare Düğmesini kullanın.

Önerilen Makaleler
Unity için Helikopter Kontrolörü
Unity için Uçak Kontrol Cihazı
Unity için RTS ve MOBA Player Controller
Unity'de 2D Platformer Karakter Denetleyicisine Double Jump Desteği Ekleme
Unity'de Vinç Kontrolü Nasıl Yapılır
Unity için Araç Kontrol Cihazı
Karakter Denetleyicisi Birlik İçinde Sert Cisimleri İtme Yeteneği Nasıl Eklenir