Unity'de Atış Nasıl Yapılır

Bu eğitimde, Unity'de nasıl atış yapılacağını adım adım ele alacağız. İleriye doğru hareket eden ve diğer nesnelerle etkileşime giren temel bir merminin nasıl oluşturulacağını öğreneceksiniz. Sonunda, bir oyunda atış simülasyonu yapmak için bir GameObject'e eklenebilecek çalışan bir betiğe sahip olacaksınız.

Sahneyi Kurmak

Kodlamaya dalmadan önce, bir mermi oluşturmak için sahneyi ayarlayalım. Başlamak için adımlar şunlardır:

  1. Yeni bir Unity projesi oluşturun veya var olan bir projeyi açın.
  2. Sahnenizde, atışı yapan oyuncu veya nesne gibi davranacak 3 boyutlu bir nesne (örneğin bir küp veya küre) yaratın.
  3. Mermi görevi görecek başka bir 3B nesne (örneğin, daha küçük bir küre) yaratın. Bu, atış yapıldığında örneklenecektir.
  4. Nesnelerinizi "Player" ve "ProjectilePrefab" gibi anlamlı isimler vererek düzenleyin.

Çekim Senaryosu Oluşturma

Artık temel sahnemiz olduğuna göre, atışı yönetecek betiği oluşturalım. Betiğe Shot.cs adını vereceğiz ve oyuncu nesnesine ekleyeceğiz. Bu betik mermiyi üretecek ve atışı simüle etmek için ileri bir kuvvet uygulayacak.

Komut dosyasını oluşturmak için şu adımları izleyin:

  1. Unity düzenleyicisinde, Proje penceresine sağ tıklayın ve Oluştur > C# Komut Dosyası'ü seçin. Komut dosyasına Shot.cs adını verin.
  2. Shot.cs dosyasına çift tıklayarak kod düzenleyicinizde açın.
  3. Varsayılan kodu aşağıdaki betikle değiştirin:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

Bu betik aşağıdaki görevleri gerçekleştirir:

  • Mermi nesnesini tutmak için genel bir projectilePrefab tanımlar.
  • Atışın nereden kaynaklandığını belirtmek için firePoint kullanılır.
  • Merminin hızını kontrol etmek için projectileSpeed komutunu kullanır.
  • Input.GetButtonDown("Fire1") komutunu kullanarak oyuncu girdisini kontrol eder; bu komut, "Fire1" eylemini (genellikle sol fare düğmesine veya boşluk çubuğuna eşlenir) dinler.
  • firePoint noktasında bir mermi örneği oluşturur ve ona ileri bir hız uygular.

Komut Dosyasını Atama Unity

Artık betiğimiz hazır olduğuna göre, onu oyuncu nesnesine atamanın ve referansları ayarlamanın zamanı geldi:

  1. Sahnedeki "Player" GameObject'i seçin.
  2. Shot.cs betiğini eklemek için "Player"'in üzerine sürükleyin.
  3. Denetçi penceresinde, betiğin alanlarını göreceksiniz. Mermi prefab'ını (örneğin, oluşturduğunuz küçük küre) ProjectilePrefab yuvasına atayın.
  4. Oyuncu nesnesinin altında boş bir GameObject oluşturun ve adını "FirePoint" koyun. Bunu oyuncunun önüne veya merminin çıkmasını istediğiniz yere yerleştirin.
  5. "FirePoint" nesnesini betikteki FirePoint alanına sürükleyin.

Atışı Test Etmek

Atış işlevini test etmek için Unity'deki Oynat düğmesine basın ve ateş düğmesine basın (varsayılan sol fare düğmesi veya boşluk çubuğudur). Düğmeye bastığınızda merminin ortaya çıktığını ve ileri doğru hareket ettiğini görmelisiniz. Merminin hızını veya görünümünü ihtiyaçlarınıza daha iyi uyacak şekilde ayarlayabilirsiniz.

Sıkça Sorulan Sorular

Atılan mermiyi nasıl imha edebilirim?

Mermilerinizin sonsuza dek var olmasını önlemek için, onları belirli bir süre sonra yok edebilirsiniz. FireShot yönteminde, mermiyi örnekledikten sonra şunları ekleyebilirsiniz:

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

Çekime ses efektleri veya animasyonlar nasıl eklerim?

AudioSource bileşenini kullanarak ses efektleri ekleyebilirsiniz. Bunu oynatıcıya ekleyin ve FireShot yönteminde bir ses çalın:

AudioSource audioSource = GetComponent();
audioSource.Play();

Animasyonlar için, Animator bileşenini kullanarak veya FireShot metodu içinde belirli GameObject durumlarını etkinleştirerek/devre dışı bırakarak bir animasyonu tetikleyebilirsiniz.

Merminin diğer nesnelerle etkileşime girmesini nasıl sağlarım?

Merminin diğer nesnelerle etkileşime girmesini sağlamak için, merminin bir Rigidbody ve bir Collider bileşenine sahip olduğundan emin olun. Daha sonra OnCollisionEnter veya OnTriggerEnter: kullanarak çarpışma algılamayı işleyen bir betik yazabilirsiniz.

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

Çözüm

Umarım bu eğitim, bir mermi oluşturarak, ona kuvvet uygulayarak ve temel çarpışma algılamayı ele alarak Unity'de nasıl atış yapacağınızı öğrenmenize yardımcı olmuştur. Bu teknik, efektler, ses veya gelişmiş fizik eklemek gibi daha karmaşık etkileşimler için genişletilebilir.