Birlik FPS Denetleyicisi

FPS (veya First-Person Shooter), ana karakterin birinci şahıs bakış açısıyla kontrol edildiği bir oyundur.

Olağan kontroller yürümek için W, A, S ve D, etrafa bakmak için Fare Bakışı, zıplamak için Space ve koşmak için Sola Shift'tir; bu, oyuncunun seviye etrafında serbestçe hareket yapmasına olanak tanır.

Bu yazıda Unity'de kamera rotasyonunu ve oyuncu hareketini yönetecek bir FPS kontrol cihazının nasıl yapılacağını göstereceğim.

Adımlar

Bir FPS denetleyicisi yapmak için aşağıdaki adımları izleyin:

  • Yeni bir Oyun Nesnesi oluşturun (GameObject -> Boş Oluştur) ve adlandırın "FPSPlayer"
  • Yeni bir Kapsül oluşturun (GameObject -> 3D Nesne -> Kapsül) ve onu "FPSPlayer" Nesnesinin içine taşıyın
  • Kapsül Çarpıştırıcısı bileşenini Kapsül'den kaldırın ve konumunu (0, 1, 0) olarak değiştirin
  • Ana Kamerayı "FPSPlayer" Nesnesinin içine taşıyın ve konumunu (0, 1,64, 0) olarak değiştirin

  • yeni bir komut dosyası oluşturun, onu "SC_FPSController" olarak adlandırın ve içine aşağıdaki kodu yapıştırın:
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 betiğini "FPSPlayer" Nesnesine ekleyin (Karakter Denetleyicisi adında başka bir bileşen de eklediğini fark edeceksiniz, merkez değerini (0, 1, 0) olarak değiştirin)
  • Ana Kamerayı SC_FPSController'daki Oyuncu Kamerası değişkenine atayın

Birlik FPS Denetleyicisi

FPS denetleyicisi artık hazır!

Kaynak
📁FPSController.unitypackage53.91 KB
Önerilen Makaleler
Unity'de FPS Player'a Çömelme Ekleme
Unity için Oyuncu 3D ve 2D Duvardan Atlama Eğitimi
Karakter Denetleyicisi Birlik İçinde Sert Cisimleri İtme Yeteneği Nasıl Eklenir
Unity Mobil Dokunmatik Kontroller Nasıl Yapılır
Unity'de Oyuncu Hareketi Yaratmak
Unity'de Karakter Kontrolörüne Hareketli Platform Desteği Nasıl Eklenir?
Unity için Rigidbody Tabanlı Planet Oynatıcı Denetleyicisi