Unity List<> içinde Arama Yapmak (C Sharp))

C# 10 Haziran 2022 - 21:31:08 31 Gösterim 0 Yorum

Elimizde bir list var diyelim. Bu listeye koyduğumuz bir şeyin listenin içinde olup olmadığını nasıl öğreniriz? List nasıl oluşturulur? İçi nasıl boşaltılır ve nasıl içerisine bir değer eklenir daha önce burada aktarmıştım. Bu yazı bir nevi önceki makaleyi destekleyecektir.

Bir liste içerisinde arama yapmak için Find kullanıyoruz. Basit olarak bir örnek yapalım.

objelistesi.Find();

Peki elimizde ne var? Neye göre arayacağız? Bunu biraz açalım değil mi? diyelim ki objenin ismine göre arayacağız.

objelistesi.Find((obj) => obj.name == "Elimizdeki Veri");

Elimizdeki veri ismine eşit olan objenin listede olup olmadığına bakacak. Somut olarak anlamanız için aşağıda bir olay örneklemesi verdim;

İlk olarak örneklememizi oluşturalım. Diyelimki bir düşman GameObject listemiz var. İçerisinde öldürdüğümüz düşmanları tutuyoruz. Sonrada istatistiksel olarak oyun sonunda oyuncuya bu verileri vereceğiz. Fakat oyundaki öldürdüğümüz bütün düşmanlar çok bellek kaplayacak, çünkü büyük bir liste olacak. O nedenle ben Düşman Gameobject'ime bir script dosyası yazdım ve herkese açık şekilde bir int değeri atatım. Düşman daha önce öldürüldüyse bu int değerini bir arttırmak bana yetecek. Şimdi bu örneklemeyi koda dökelim.

//Düşman Gameobject'ime atayacağım bir script oluşturdum ve aşağıdaki gibi alana bir değer atatım.
...
public class DusmanTakip : MonoBehaviour
{

public int Toplamoldurme;

   void Start()
{

}

void Update()
{

}
.....

Bunu oyundaki bütün düşmanlara komponent olarak ekliyorum. Şimdi karaktere veya oyunun üst kısmında sürekli çalışacan herhangi bir script dosyama listemi oluşturayım. Ben örnek olarak CORE isimli bir cs oluşturdum ve sahnemde en üste attım.

...
public class CORE : MonoBehaviour
{

public list<GameObject> dusmanoldurmelistesi;

   void Start()
{

}

void Update()
{

}
.....

dusmanoldurmelistesi isimli listemi olusturdum. Şimdi ise şartlamamı yazacağım. Bu şartlamayı düşmanı öldürdüğünüzde etki eden kodların altına ekleyebilirsiniz.

var dusman = "###Düşman GameObjectinizi buraya girebilirsiniz.###"

if(dusmanoldurmelistesi.Find((obj) => obj == dusman))
{
//Düşman öldürme listemizde bu düşman zaten var: O halde komponentteki sayıyı arttırsak yeterli.

dusmanoldurmelistesi.Find((obj)=>obj == dusman).transform.GetComponent<DusmanTakip>().ToplamOldurme += 1;

}else{
//Daha önce bu düsman objesi listeye eklenmemiş o halde ekleyelim.

dusmanoldurmelistesi.Add(dusman);

}

Örneklemeyi aktardım.

Yorum Yapılmamış

Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?

Yorum Yapın