Menerapkan Sistem Parkour di Unity

Konsep parkour, sebuah disiplin pelatihan yang berfokus pada mengatasi hambatan fisik menggunakan gerakan, telah mendapatkan popularitas yang luar biasa di video game, menawarkan lingkungan yang interaktif dan menarik kepada pemain. Menerapkan sistem ini di Unity dapat meningkatkan pengalaman bermain game. Tutorial ini akan memandu Anda melalui proses pengaturan sistem parkour dasar di Unity, dengan fokus pada lari di dinding dan lompat.

Aset yang Dibutuhkan

1. Mengatur Adegan

  • Pastikan lingkungan memiliki dinding dan penghalang yang ditandai dengan tepat, gunakan "Wall" untuk dinding dan "Obstacle" untuk penghalang berkubah.

2. Memodifikasi Script 'SC_TPSController' untuk Wall Running

2.1. Mendeteksi Dinding:

  • Metode ini memeriksa apakah karakter berada di samping dinding menggunakan raycasting.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. Berjalan di Dinding

  • Coroutine ini menangani wall running.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • Integrasikan wall running dalam metode 'Update()':
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. Memodifikasi 'SC_TPSController' untuk Vaulting

3.1. Mendeteksi Hambatan

  • Periksa rintangan yang bisa dilompati di depan karakter.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. Kubah

  • Tambahkan metode vaulting:
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • Integrasikan vaulting dalam metode 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Kesimpulan

Modifikasi ini akan memperkenalkan fungsi wall running dan vaulting ke pengontrol pemain orang ketiga yang ada. Uji gerakan-gerakan baru ini dalam berbagai skenario untuk memastikan gerakan-gerakan tersebut berfungsi sebagaimana mestinya. Penyesuaian mungkin diperlukan tergantung pada lingkungan spesifik permainan atau mekanisme parkour yang diinginkan.

Artikel yang Disarankan
Pengendali Mobil untuk Persatuan
Sistem Dialog untuk Persatuan
Menciptakan Pergerakan Pemain dalam Kesatuan
Cara Membuat Kontrol Derek di Unity
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Tutorial Lompat Dinding 3D dan 2D Pemain untuk Unity
Unity Cara Membuat Kontrol Sentuh Seluler