وحدة تحكم FPS

FPS (أو First-Person Shooter) هي لعبة يتم فيها التحكم في الشخصية الرئيسية من منظور الشخص الأول.

عناصر التحكم المعتادة هي W وA وS وD للمشي، والنظر بالماوس للنظر حولك، والمسافة للقفز، والتحول الأيسر للركض، مما يسمح للاعب التحرك بحرية حول المستوى.

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

خطوات

لإنشاء وحدة تحكم FPS، اتبع الخطوات التالية:

  • قم بإنشاء كائن لعبة جديد (GameObject -> إنشاء فارغ) وقم بتسميته "FPSPlayer"
  • قم بإنشاء كبسولة جديدة (GameObject -> كائن ثلاثي الأبعاد -> كبسولة) وحركها داخل الكائن "FPSPlayer"
  • قم بإزالة مكون مصادم الكبسولة من الكبسولة وقم بتغيير موضعه إلى (0، 1، 0)
  • قم بتحريك الكاميرا الرئيسية داخل الكائن "FPSPlayer" وقم بتغيير موضعه إلى (0، 1.64، 0)

  • قم بإنشاء سكريبت جديد، وقم بتسميته "SC_FPSController" والصق الكود أدناه بداخله:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]

public class SC_FPSController : MonoBehaviour
{
    public float walkingSpeed = 7.5f;
    public float runningSpeed = 11.5f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    public Camera playerCamera;
    public float lookSpeed = 2.0f;
    public float lookXLimit = 45.0f;

    CharacterController characterController;
    Vector3 moveDirection = Vector3.zero;
    float rotationX = 0;

    [HideInInspector]
    public bool canMove = true;

    void Start()
    {
        characterController = GetComponent<CharacterController>();

        // Lock cursor
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void Update()
    {
        // We are grounded, so recalculate move direction based on axes
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        Vector3 right = transform.TransformDirection(Vector3.right);
        // Press Left Shift to run
        bool isRunning = Input.GetKey(KeyCode.LeftShift);
        float curSpeedX = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Vertical") : 0;
        float curSpeedY = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Horizontal") : 0;
        float movementDirectionY = moveDirection.y;
        moveDirection = (forward * curSpeedX) + (right * curSpeedY);

        if (Input.GetButton("Jump") && canMove && characterController.isGrounded)
        {
            moveDirection.y = jumpSpeed;
        }
        else
        {
            moveDirection.y = movementDirectionY;
        }

        // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below
        // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied
        // as an acceleration (ms^-2)
        if (!characterController.isGrounded)
        {
            moveDirection.y -= gravity * Time.deltaTime;
        }

        // Move the controller
        characterController.Move(moveDirection * Time.deltaTime);

        // Player and Camera rotation
        if (canMove)
        {
            rotationX += -Input.GetAxis("Mouse Y") * lookSpeed;
            rotationX = Mathf.Clamp(rotationX, -lookXLimit, lookXLimit);
            playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
            transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * lookSpeed, 0);
        }
    }
}
  • قم بإرفاق البرنامج النصي SC_FPSController بالكائن "FPSPlayer" (ستلاحظ أنه أضاف أيضًا مكونًا آخر يسمى Character Controller، قم بتغيير قيمته المركزية إلى (0، 1، 0))
  • قم بتعيين الكاميرا الرئيسية لمتغير Player Camera في SC_FPSController

وحدة تحكم FPS

وحدة تحكم FPS جاهزة الآن!

مصدر
📁FPSController.unitypackage53.91 KB
المقالات المقترحة
إضافة الرابض إلى مشغل FPS في Unity
البرنامج التعليمي للاعب القفز على الحائط ثلاثي الأبعاد وثنائي الأبعاد للوحدة
وحدة التحكم في الشخصية كيفية إضافة القدرة على دفع الأجسام الصلبة في الوحدة
الوحدة كيفية جعل عناصر التحكم باللمس المحمول
كيفية إضافة دعم النظام الأساسي المتحرك إلى وحدة التحكم بالأحرف في Unity
وحدة التحكم الكوكبية القائمة على الجسم الصلب من أجل الوحدة
إنشاء حركة اللاعب في الوحدة