C# Unity'de iki düşmanın birbirine saldırması nasıl engellenir?

Witches

Decapat
Katılım
16 Haziran 2021
Mesajlar
422
Çözümler
1
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
Geliştirici
Örneğin: İki iskeleti yan yana koyuyorum birbirlerini görüp saldırmaya başlıyorlar birbirlerine ama hasar vuramıyorlar çünkü sadece Player tagına hasar veriyorlar. Ama sorun birbirlerine saldırıyormuş gibi animasyon çıkması ve birbirlerine kilitlenmeleri. Nasıl çözebilirim?
 
Nasıl yaptığını anlamadım ama sadece player tagine saldırmalarını söyleyebilirsin. Kodu paylaşırsan daha fazla yardım edebilirim belki
 
Nasıl yaptığını anlamadım ama sadece Player tagine saldırmalarını söyleyebilirsin. Kodu paylaşırsan daha fazla yardım edebilirim belki

Sadece Player tagine hasar veriyorlar ve kod çok uzun hepsini atmam sıkıntı olabilir.
Küçük bir kod ile halledilebileceğini düşünüyorum.
 
enemyattackpoint diye ayrı bir empty oluşturdum 5 kare önünü görebiliyor eğer bir boxcollider görürse saldırmaya başlıyor
 
Kodları görmeden net bir yorum yapmak zor ancak fikir yürüterek şunları söyleyebilirim:

Eğer iskeletlerin özel bir katmanı(layer) varsa (örneğin enemy) birbirleriyle etkileşime girmesini engelleyebilirsiniz ancak bu durumda iskeletler birbirinin içinden geçecektir. Bunu yapmak için "Edit > Project Settings > Physics" kısmına gidin. "Layer Collision Matrix" kısmında iskeletin katmanını bulun ve tabloda kendisine denk gelen kutunun işaretini kaldırın.

Bir diğer yöntem olarak kodda değişiklik yapabilirsiniz. İskeletlerin hedef tespiti ve animasyon geçişi yapan kodlarını " if " sorgusuna alabilirsiniz. Örneğin OnCollisionEnter kodunu kullandığınızı varsayalım:

Tag kullanmak istiyorsanız:
C#:
if(collision.gameObject.tag == "player")
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}

Layer kullanmak istiyorsanız:
C#:
if (collision.gameObject.layer == LayerMask.NameToLayer("player"))
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}
 
Kodları görmeden net bir yorum yapmak zor ancak fikir yürüterek şunları söyleyebilirim:

Eğer iskeletlerin özel bir katmanı(layer) varsa (örneğin enemy) birbirleriyle etkileşime girmesini engelleyebilirsiniz ancak bu durumda iskeletler birbirinin içinden geçecektir. Bunu yapmak için "Edit > Project Settings > Physics" kısmına gidin. "Layer Collision Matrix" kısmında iskeletin katmanını bulun ve tabloda kendisine denk gelen kutunun işaretini kaldırın.

Bir diğer yöntem olarak kodda değişiklik yapabilirsiniz. İskeletlerin hedef tespiti ve animasyon geçişi yapan kodlarını " if " sorgusuna alabilirsiniz. Örneğin OnCollisionEnter kodunu kullandığınızı varsayalım:

Tag kullanmak istiyorsanız:
C#:
if(collision.gameObject.tag == "player")
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}

Layer kullanmak istiyorsanız:
C#:
if (collision.gameObject.layer == LayerMask.NameToLayer("player"))
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}
Hocam eğer sorun olmayacaksa iskeletler birbirinin içinden geçebilir sorun olacağını düşünmüyorum. Aksine diğer türlü sorun olur.
 
void OnTriggerEnter(Collision collision){
If(collision.gameObject.CompareTag("Player"){
#saldırmayla ilgili komut
}
}
bunun gibi bişey olur galiba
 
Hocam
void OnTriggerEnter(Collision collision){
If(collision.gameObject.CompareTag("Player"){
#saldırmayla ilgili komut
}
}
bunun gibi bişey olur galiba
Kodları görmeden net bir yorum yapmak zor ancak fikir yürüterek şunları söyleyebilirim:

Eğer iskeletlerin özel bir katmanı(layer) varsa (örneğin enemy) birbirleriyle etkileşime girmesini engelleyebilirsiniz ancak bu durumda iskeletler birbirinin içinden geçecektir. Bunu yapmak için "Edit > Project Settings > Physics" kısmına gidin. "Layer Collision Matrix" kısmında iskeletin katmanını bulun ve tabloda kendisine denk gelen kutunun işaretini kaldırın.

Bir diğer yöntem olarak kodda değişiklik yapabilirsiniz. İskeletlerin hedef tespiti ve animasyon geçişi yapan kodlarını " if " sorgusuna alabilirsiniz. Örneğin OnCollisionEnter kodunu kullandığınızı varsayalım:

Tag kullanmak istiyorsanız:
C#:
if(collision.gameObject.tag == "player")
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}

Layer kullanmak istiyorsanız:
C#:
if (collision.gameObject.layer == LayerMask.NameToLayer("player"))
{
    //DÜŞMANA KİLİTLEN VE SALDIR
}

Zaten karaktere odaklanıyor onda problem yok sadece kendi safındaki kişilerede kitleniyor.
 

Geri
Yukarı