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
- Unity arayüzü ile ilgili temel bilgi.
- Unity 'CharacterController''ün anlaşılması.
- Unity FPS Denetleyicisi eğitimindeki FPS denetleyici komut dosyası.
Adımlar
- Unity FPS Denetleyicisi eğitimindeki 'SC_FPSController' adlı class'e çömelmeyi işlemek için aşağıdaki değişkenleri ekleyin:
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:
- Çö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.
- '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.
- Çö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.