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:
- Yeni bir Unity projesi oluşturun veya var olan bir projeyi açın.
- Sahnenizde, atışı yapan oyuncu veya nesne gibi davranacak 3 boyutlu bir nesne (örneğin bir küp veya küre) yaratın.
- 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.
- 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:
- 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. Shot.cs
dosyasına çift tıklayarak kod düzenleyicinizde açın.- 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:
- Sahnedeki "Player" GameObject'i seçin.
Shot.cs
betiğini eklemek için "Player"'in üzerine sürükleyin.- 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. - 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.
- "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.