Tutorial Lompat Dinding 3D dan 2D Pemain untuk Unity

Lompat ke dinding, sebuah mekanisme yang lazim di platformer dan game aksi, memungkinkan pemain melompat dari dinding, menambah kerumitan dan keserbagunaan pada navigasi. Tutorial ini bertujuan untuk mengintegrasikan wall jumping ke dalam FPS Controller yang disediakan. Pada akhirnya, karakter pemain akan dapat melakukan lompatan dinding dalam pengaturan 2D dan 3D.

Mengimplementasikan Wall Jump untuk 3D menggunakan skrip 'SC_FPSController'

Dimulai dengan kode dasar yang diberikan dari tutorial Unity Pengontrol FPS, kami akan memperkenalkan mekanisme lompat dinding.

Langkah 1: Menyiapkan Deteksi Dinding

  • Tambahkan layer baru di Unity bernama "Wall" untuk objek yang dapat dilompati dinding.
  • Perbarui kelas 'SC_FPSController', yang bisa Anda dapatkan dari tutorial Unity Pengontrol FPS kami, dengan variabel berikut:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Langkah 2: Mendeteksi Dinding

  • Gabungkan logika berikut di dalam metode 'Update()' untuk mendeteksi dinding:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Raycast pada kode di atas akan mendeteksi dinding di kiri dan kanan pemain.

Langkah 3: Menerapkan Wall Jump untuk 3D

  • Dalam metode 'Update()', setelah logika lompat tanah, masukkan:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

Logika pada kode di atas memeriksa apakah pemain menekan tombol lompat, dapat bergerak, dan menyentuh dinding. Jika demikian, maka gaya tersebut memberikan gaya vertikal dan sedikit gaya horizontal menjauhi dinding.

Mengimplementasikan Wall Jump untuk 2D menggunakan skrip 'CharacterController2D'

Dimulai dengan kode dasar yang diberikan dari 2D Character Controller untuk tutorial Unity, kami akan memperkenalkan mekanik wall jump.

Langkah 1: Menyiapkan Deteksi Dinding

public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Langkah 2: Mendeteksi Dinding dalam 2D

  • Gabungkan logika berikut di dalam metode 'Update()' untuk mendeteksi dinding:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Langkah 3: Menerapkan Wall Jump untuk 2D

  • Dalam metode 'Update()', setelah logika lompat tanah, masukkan:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

Pertanyaan yang Dialamatkan:

  1. Bagaimana karakter dapat mendeteksi dinding di Unity?: Karakter dapat mendeteksi dinding menggunakan raycasting. Dengan menembakkan sinar tak terlihat dari pemain ke arah yang diinginkan, seseorang dapat menentukan apakah suatu objek, seperti dinding, berpotongan dengan sinar ini.
  2. Apa perbedaan antara implementasi lompat dinding 2D dan 3D di Unity?: Dalam Unity, fisika 2D menggunakan metode 'Physics2D' (seperti 'Physics2D.Raycast()'), sedangkan fisika 3D menggunakan metode 'Physics' (seperti 'Physics.Raycast()'). Logikanya tetap relatif sama, namun metode dan arahnya (Vector2 untuk 2D, Vector3 untuk 3D) berbeda-beda.

Kesimpulan

Penambahan ini memungkinkan karakter dalam ruang 2D untuk melompat dari dinding. Eksperimen dengan nilai gaya mungkin diperlukan untuk memastikan gameplay lancar. Dengan mengintegrasikan langkah-langkah ini, pemain akan merasakan pergerakan karakter 2D menjadi lebih fleksibel dan dinamis di lingkungan berdinding.

Artikel yang Disarankan
Tutorial Pengontrol Pemain Top-Down untuk Unity
Pengontrol Pemain RTS dan MOBA untuk Unity
Menambahkan Dukungan Lompat Ganda ke Pengontrol Karakter Platformer 2D di Unity
Tutorial Senter untuk Unity
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Menerapkan Sistem Parkour di Unity
Tutorial Pengontrol Worm 3D untuk Unity