Unity için Oyuncu 3D ve 2D Duvardan Atlama Eğitimi

Platform oyunlarında ve aksiyon oyunlarında yaygın olarak kullanılan bir mekanik olan duvardan atlama, oyuncuların duvarlardan atlamasına olanak tanıyarak navigasyona karmaşıklık ve çok yönlülük katar. Bu eğitim, duvardan atlamayı sağlanan FPS Denetleyicisine entegre etmeyi amaçlamaktadır. Sonunda, oyuncu karakteri hem 2D hem de 3D ayarlarında duvardan atlamalar gerçekleştirebilecek.

'SC_FPSController' komut dosyasını kullanarak 3D için Wall Jump'ı uygulama

Unity FPS Kontrol Cihazı eğitiminde verilen temel kodla başlayarak duvardan atlama mekaniğini tanıtacağız.

Adım 1: Duvar Algılamayı Ayarlama

  • Duvardan atlanabilecek nesneler için Unity alanına "Wall" adında yeni bir katman ekleyin.
  • Unity FPS Kontrol Cihazı eğiticimizden alabileceğiniz 'SC_FPSController' sınıfını aşağıdaki değişkenlerle güncelleyin:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Adım 2: Duvarın Tespiti

  • Bir duvarı algılamak için aşağıdaki mantığı 'Update()' yönteminin içine ekleyin:
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;
}

Yukarıdaki koddaki bu raycast, oynatıcının solundaki ve sağındaki duvarları algılayacaktır.

Adım 3: 3D için Wall Jump'ı Uygulama

  • 'Update()' yönteminin içine, yerden atlama mantığından sonra şunu ekleyin:
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;
    }
}

Yukarıdaki koddaki bu mantık, oyuncunun atlama tuşuna basıp basmadığını, hareket edip edemediğini ve bir duvara dokunup dokunmadığını kontrol eder. Eğer öyleyse, duvardan uzağa dikey bir kuvvet ve hafif bir yatay kuvvet uygular.

'CharacterController2D' betiğini kullanarak 2D için Wall Jump'ı uygulama

Unity için 2D Karakter Denetleyicisi eğitiminde verilen temel kodla başlayarak, duvardan atlama mekaniğini tanıtacağız.

Adım 1: Duvar Algılamayı Ayarlama

  • Duvardan atlanabilecek nesneler için Unity alanına "Wall" adında yeni bir katman ekleyin.
  • 2D Karakter Denetleyicisi için Unity eğiticimizden alabileceğiniz 'CharacterController2D' sınıfını aşağıdaki değişkenlerle güncelleyin:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Adım 2: Duvarın 2B Olarak Algılanması

  • Bir duvarı algılamak için aşağıdaki mantığı 'Update()' yönteminin içine ekleyin:
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;
}

Adım 3: 2B için Wall Jump'ı Uygulama

  • 'Update()' yönteminin içine, yerden atlama mantığından sonra şunu ekleyin:
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
    }
}

Ele Alınan Sorular:

  1. Bir karakter Unity'de bir duvarı nasıl algılayabilir?: Bir karakter, raycasting kullanarak duvarları algılayabilir. Oyuncudan görünmez bir ışının istenilen yöne çekilmesiyle, duvar gibi bir nesnenin bu ışınla kesişip kesişmediği belirlenebilir.
  2. Unity'da 2B ve 3B duvardan atlama uygulaması arasındaki fark nedir?: Unity'da 2B fizik, 'Physics2D' yöntemlerini kullanır ('Physics2D.Raycast()' gibi), 3D fizik ise 'Physics' yöntemlerini kullanır ('Physics.Raycast()' gibi) ). Mantık nispeten benzer kalır ancak yöntemler ve yönler (2B için Vektör2, 3B için Vektör3) farklılık gösterir.

Çözüm

Bu ekleme, 2 boyutlu alandaki karakterin duvarlardan atlamasına olanak tanır. Sorunsuz bir oyun deneyimi sağlamak için kuvvet değerleriyle denemeler yapmak gerekebilir. Oyuncular bu adımları entegre ederek 2 boyutlu karakterin hareketinin duvarlı ortamlarda daha çok yönlü ve dinamik olduğunu görecekler.

Önerilen Makaleler
Unity için El Feneri Eğitimi
Unity'de Parkur Sisteminin Uygulanması
Birlik İçin Diyalog Sistemi
Unity'de Oyuncu Hareketi Yaratmak
Unity için 3D Solucan Denetleyici Eğitimi
Unity için Rigidbody Tabanlı Planet Oynatıcı Denetleyicisi
Unity için 2D Karakter Kontrol Cihazı