Oyun Kütüphanesi

Tam FPS Oyuncu Kontrolörü (Birleşik)

Hareket Sistemleri Unity C# 2
TamFPSOyuncuKontrolörüBirleşik .cs
C#
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class FPSController : MonoBehaviour
{
    [Header("Hareket")]
    public float walkSpeed = 5f;
    public float sprintSpeed = 9f;

    [Header("Zıplama")]
    public float jumpHeight = 1.2f;
    public float gravity = -9.81f;

    [Header("Mouse Bakış")]
    public float mouseSensitivity = 100f;
    public Transform cameraTransform;

    [Header("Zemin Kontrolü")]
    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    // Private
    private CharacterController controller;
    private Vector3 velocity;
    private float xRotation = 0f;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        HandleMouseLook();
        HandleMovement();
        HandleJump();
        ApplyGravity();
    }

    void HandleMouseLook()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);
        cameraTransform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        transform.Rotate(Vector3.up * mouseX);
    }

    void HandleMovement()
    {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        bool sprinting = Input.GetKey(KeyCode.LeftShift);
        float speed = sprinting ? sprintSpeed : walkSpeed;

        Vector3 move = transform.right * x + transform.forward * z;
        controller.Move(move * speed * Time.deltaTime);
    }

    void HandleJump()
    {
        bool isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
        if (isGrounded && velocity.y < 0) velocity.y = -2f;

        if (Input.GetButtonDown("Jump") && isGrounded)
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
    }

    void ApplyGravity()
    {
        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
    }
}

Açıklama

WASD hareketi, mouse bakış, Space zıplama ve Shift sprint özelliklerini tek script altında birleştiren tam kapsamlı FPS oyuncu şablonu.

Etiketler

FPS WASD Space Shift Zıplama Sprint Tam Birleşik

Nasıl Kullanılır?

1. Player'a 'CharacterController' ekle.

2. Player'ın çocuğu olarak 'Main Camera' ekle.

3. Ayaklar hizasında boş 'GroundCheck' objesi oluştur.

4. 'Ground' Layerı zemine ata.

5. Tüm alanları Inspector'dan doldur. Tek script ile tam FPS kontrolü hazır!

Unity 2022+ ve Unity 6 ile uyumludur.

MonoBehaviour tabanlı scriptleri Assets klasörüne .cs olarak kaydedin.