Menambahkan Crouching ke FPS Player di Unity

Menambahkan mekanisme crouching dapat memperdalam pengalaman dan memberikan kedalaman taktis pada gameplay, terutama dalam game berbasis orang pertama dan siluman. Berdasarkan tutorial Unity Pengontrol FPS kami, panduan ini menampilkan cara menambahkan fitur jongkok yang mulus di Unity.

Prasyarat

Langkah

  • Dalam class bernama 'SC_FPSController', dari tutorial Unity Pengontrol FPS, tambahkan variabel berikut untuk menangani jongkok:
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;
  • Ubah metode 'Start()' untuk menyimpan ketinggian asli 'CharacterController' dan atur posisi kamera:
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;
}
  • Dalam metode 'Update()', periksa apakah tombol jongkok ditekan dan alihkan variabel 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Di luar blok sebelumnya, terapkan transisi mulus untuk posisi kamera antara berjongkok dan berdiri:
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);
}
  • Sesuaikan kecepatan gerakan pemain berdasarkan keadaan saat ini:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Pertanyaan:

  1. Mengapa menggunakan 'Vector3.Lerp()' untuk transisi kamera saat berjongkok?: Fungsi 'Vector3.Lerp()' digunakan untuk melakukan interpolasi dengan lancar antara dua vektor. Dalam konteks ini, ini memungkinkan kamera untuk bertransisi dengan lancar antara posisi berdiri dan berjongkok, alih-alih memotret secara tiba-tiba.
  2. Apa peran 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' menentukan seberapa cepat transisi antara posisi kamera berjongkok dan berdiri terjadi. Nilai yang lebih tinggi menghasilkan transisi yang lebih cepat.
  3. Apakah mungkin untuk menyesuaikan tombol crouch?: Tentu saja. Tombol crouch saat ini disetel ke 'C' ('KeyCode.C'). Ganti dengan 'KeyCode' yang diinginkan untuk menyesuaikan tombol berjongkok.

Kesimpulan

Menggabungkan mekanisme berjongkok yang mulus di Unity, yang melibatkan penyesuaian ukuran collider dan posisi kamera, dapat meningkatkan pengalaman pemain secara signifikan. Panduan ini telah memberikan metode untuk mencapai hal ini dengan transisi yang alami dan lancar.

Artikel yang Disarankan
Pengontrol FPS Persatuan
Menambahkan Efek Kepala Terombang-ambing ke Kamera di Unity
Tutorial Pengontrol Pemain Top-Down untuk Unity
Menambahkan Dukungan Lompat Ganda ke Pengontrol Karakter Platformer 2D di Unity
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Menciptakan Pergerakan Pemain dalam Kesatuan
Cara Menambahkan Dukungan Platform Bergerak ke Pengontrol Karakter di Unity