Unity FPS Denetleyicisi

FPS (veya Birinci Şahıs Nişancı) ana karakterin birinci şahıs bakış açısıyla kontrol edildiği bir oyundur.

Genel kontroller yürümek için W, A, S ve D, etrafa bakmak için Mouse Look, zıplamak için Space ve koşmak için Sol Shift'tir ve oyuncunun seviye boyunca serbestçe hareket etmesini sağlar.

Bu yazımda, kamera dönüşü ve oyuncu hareketini yönetecek Unity boyutunda bir FPS kontrolcüsünün nasıl yapılacağını göstereceğim.

Adımlar

FPS kontrolcüsü yapmak için aşağıdaki adımları izleyin:

  • Yeni bir Oyun Nesnesi oluşturun (GameObject -> Create Empty) ve adını verin "FPSPlayer"
  • Yeni bir Kapsül oluşturun (GameObject -> 3D Nesne -> Kapsül) ve onu "FPSPlayer" Nesnesinin içine taşıyın
  • Capsule Collider bileşenini Capsule'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

  • adında yeni bir script oluşturun, adını "SC_FPSController" koyun 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);
        }
    }
}
  • "FPSPlayer" Nesnesine SC_FPSController betiğini ekleyin (Karakter Denetleyicisi adında başka bir bileşen daha eklediğini fark edeceksiniz, merkez değerini (0, 1, 0) olarak değiştirin)
  • Ana Kamerayı SC_FPSController'daki Oyuncu Kamera değişkenine atayın

Unity FPS Denetleyicisi

FPS kontrolcünüz artık hazır!