Unity'de FPS Player'a Çömelme Ekleme

çömelme mekanizmasının eklenmesi, özellikle birinci şahıs ve gizlilik tabanlı oyunlarda sürükleyiciliği derinleştirebilir ve oynanışa taktiksel derinlik sağlayabilir. Unity FPS Kontrol Cihazı eğitimimizi temel alan bu kılavuz, Unity'te düzgün çömelme özelliğinin nasıl ekleneceğini gösterir.

Önkoşullar

Adımlar

public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • 'CharacterController''nın orijinal yüksekliğini saklamak ve kamera konumlarını ayarlamak için 'Start()' yöntemini değiştirin:
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • 'Update()' yönteminde çömelme tuşuna basıp basmadığınızı kontrol edin ve 'isCrouching' değişkenini değiştirin:
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Önceki bloğun dışında, kameranın çömelme ve ayakta durma arasındaki konumu için yumuşak geçişi uygulayın:
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • Mevcut duruma göre oynatıcının hareket hızını ayarlayın:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Sorular:

  1. Çömelme sırasında kamera geçişi için neden 'Vector3.Lerp()' kullanılmalı?: 'Vector3.Lerp()' işlevi, iki vektör arasında sorunsuz şekilde enterpolasyon yapmak için kullanılır. Bu bağlamda, kameranın aniden kapanmak yerine ayakta durma ve çömelme konumları arasında akıcı bir şekilde geçiş yapmasına olanak tanır.
  2. 'crouchTransitionSpeed''nin rolü nedir?: 'crouchTransitionSpeed' çömelme ve ayakta kamera konumları arasındaki geçişin ne kadar hızlı gerçekleşeceğini belirler. Daha yüksek bir değer daha hızlı bir geçişle sonuçlanır.
  3. Çömelme tuşunu özelleştirmek mümkün mü?: Kesinlikle. Çömelme tuşu şu anda 'C' ('KeyCode.C') olarak ayarlıdır. Çömelme tuşunu ayarlamak için istediğiniz herhangi bir 'KeyCode' ile değiştirin.

Çözüm

çarpıştırıcı boyutunun ve kamera konumunun ayarlanmasını içeren Unity'e yumuşak bir çömelme mekaniğinin dahil edilmesi, oyuncuların oyuna olan ilgisini önemli ölçüde artırabilir. Bu kılavuz, bunu doğal, akıcı bir geçişle başarmak için bir yöntem sunmaktadır.

Önerilen Makaleler
Birlik FPS Denetleyicisi
Unity'de 2D Platformer Karakter Denetleyicisine Double Jump Desteği Ekleme
Karakter Denetleyicisi Birlik İçinde Sert Cisimleri İtme Yeteneği Nasıl Eklenir
Unity için Oyuncu 3D ve 2D Duvardan Atlama Eğitimi
Unity Mobil Dokunmatik Kontroller Nasıl Yapılır
Unity'de Kameraya Kafa Sallama Efekti Ekleme
Unity için Yukarıdan Aşağıya Oyuncu Kontrol Eğiticisi