تحكم سفينة الفضاء في الوحدة

في هذا البرنامج التعليمي، سأوضح كيفية إنشاء وحدة تحكم لسفينة الفضاء في Unity.

هيا نبدأ!

خطوات

  • ضع نموذج spaceship في المشهد الخاص بك

  • قم بإنشاء GameObject جديد، أطلق عليه اسم "Spaceship"
  • انقل نموذج سفينة الفضاء داخل الكائن "Spaceship" وقم بتغيير موضعه إلى (0، 0، 0)
  • قم بإنشاء سكريبت جديد، وأطلق عليه اسم "SC_SpaceshipController" والصق الكود أدناه داخله:

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 بالكائن "Spaceship"
  • قم بإنشاء كائن GameObject جديد، وأطلق عليه اسم "CameraPosition" وحركه داخل الكائن "Spaceship"
  • قم بتحريك الكاميرا الرئيسية داخل الكائن "CameraPosition" وقم بتغيير موضعه إلى (0، 0، 0)
  • قم بتعديل موضع الكائن "CameraPosition" حتى تشعر بالرضا عن النتيجة

  • قم بتحريك الكاميرا الرئيسية خارج الكائن "Spaceship"
  • في SC_SpaceshipController، قم بتعيين متغيرات موضع الكاميرا والكاميرا الرئيسية وجذر سفينة الفضاء (يجب أن يكون هذا تحويلًا لنموذج سفينة الفضاء)

  • قم بإنشاء لوحة واجهة مستخدم جديدة (GameObject -> UI -> Canvas)
  • انقر بزر الماوس الأيمن على كائن Canvas -> واجهة المستخدم -> الصورة
  • قم بتغيير محاذاة الصورة الجديدة إلى أعلى اليسار

  • قم بتعيين الكائن أدناه للصورة

الخيال العلمي التقاطع

  • أخيرًا، قم بتعيين الصورة التي تم إنشاؤها حديثًا إلى Crosshair Texture في SC_SpaceshipController

وحدة تحكم سفينة الفضاء جاهزة. استخدم الماوس للنظر حولك، وA/D للتدوير على طول المحور Z، وزر الماوس الأيمن للتسريع.

المقالات المقترحة
الوحدة كيفية جعل عناصر التحكم باللمس المحمول
كيفية التحكم في الرافعة في الوحدة
وحدة تحكم السيارة للوحدة
وحدة التحكم في الشخصية كيفية إضافة القدرة على دفع الأجسام الصلبة في الوحدة
وحدة تحكم الطائرة للوحدة
تنفيذ نظام الباركور في الوحدة
إضافة الرابض إلى مشغل FPS في Unity