Unity'de Parkur Sisteminin Uygulanması

Hareketi kullanarak fiziksel engellerin üstesinden gelmeye odaklanan bir eğitim disiplini olan parkur kavramı, oyunculara etkileşimli ve ilgi çekici bir ortam sunan video oyunlarında büyük popülerlik kazanmıştır. Bu sistemi uygulamak Unity oyun deneyimini artırabilir. Bu eğitim, duvarda koşma ve atlama konularına odaklanarak temel bir parkur sistemi kurma sürecinde size rehberlik edecektir Unity.

Gerekli Varlıklar

  • Temel karakter denetleyicisi: Değişiklikler için temel sınıf olarak Üçüncü Kişi Kamerasından bir oynatıcı denetleyicisi kullanacağız. Unity
  • Parkur animasyonları : duvarda koşma, atlama vb.

1. Sahneyi Ayarlamak

  • Çevrede, duvarlar ve tonozlu engeller "Wall" için kullanılarak duvarların ve engellerin uygun şekilde etiketlendiğinden emin olun. "Obstacle"

2. 'SC_TPSController' Duvar Koşusu için Komut Dosyasını Değiştirme

2.1. Bir Duvarın Tespiti:

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. Duvar Koşusu

  • Bu eşyordam duvar koşusunu yönetir.
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.
}
  • Duvar koşusunu yönteme entegre edin '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. 'SC_TPSController' Vaulting için değişiklik yapma

3.1. Bir Engelin Algılanması

  • Karakterin önünde atlanabilir bir engel olup olmadığını kontrol edin.
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. Tonozlama

  • Bir atlama yöntemi ekleyin:
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.
}
  • Vault'u yönteme entegre edin 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Çözüm

Bu değişiklikler, mevcut üçüncü şahıs oyuncu denetleyicisine duvarda koşma ve atlama işlevlerini ekleyecektir. İstenildiği gibi performans gösterdiklerinden emin olmak için bu yeni hareketleri çeşitli senaryolarda test edin. Oyunun özel ortamına veya istenilen parkur mekaniğine bağlı olarak ayarlamalar yapılması gerekebilir.

Önerilen Makaleler
Birlik İçin Diyalog Sistemi
Unity için Helikopter Kontrolörü
Unity'de 2D Platformer Karakter Denetleyicisine Double Jump Desteği Ekleme
Unity'de Vinç Kontrolü Nasıl Yapılır
Unity için Araç Kontrol Cihazı
Karakter Denetleyicisi Birlik İçinde Sert Cisimleri İtme Yeteneği Nasıl Eklenir
Unity için Uçak Kontrol Cihazı