Ekwipunek – rozpoznanie danego gameobjectu podczas metody ontriggerenter

0

Mam mały problem a mianowicie nie wiem jak rozpoznawać dany gameobject podczas metody ontriggerenter .
Zrobiłem przykladowa klase z polami do ekwipunku :

public class Items {


    //ogolne
    public int idElementu;
    public string nazwaElementu; 

    //bronie
    public int obrazeniaBroni;

    //mikstury oraz zywnosc
    public int iloscZycia; 
    public int iloscMany;
    public int iloscWytrzymalosci;
    public TypElementu typElementu;

    public Items(int id_elementu, string nazwa_elementu, int obrazenia_broni, int ilosc_zycia, int ilosc_many, int ilosc_wytrzymalosci, TypElementu typ)
    {
        this.idElementu = id_elementu;
        this.nazwaElementu = nazwa_elementu;
        this.obrazeniaBroni = obrazenia_broni;
        this.iloscZycia = ilosc_zycia;
        this.iloscMany = ilosc_many;
        this.iloscWytrzymalosci = ilosc_wytrzymalosci;
        this.typElementu = typ;
    }
    public Items(int id , string nazwa, int iloscZycia, TypElementu typ)
    {
        this.idElementu = id;
        this.nazwaElementu = nazwa;
        this.iloscZycia = iloscZycia;
        this.typElementu = typ;
    }

    //enumy wlasnosci broni i przedmiotow
    public enum TypElementu
    {
        bron_jednoreczna,
        bron_dwureczna,
        tarcza,
        mikstura_zycia,
        mikstura_many, 
        mikstura_wytrzymalosci,
        owoce,
        grzyby
    }

    
}

Stworzyłem kolejna klase która ma odpowiadać za podniesienie danego przedmiotu . Do każdego przedmiotu na scenie przypisałem tag "Przedmiot".
I teraz pytanie jak sprawdzić , który dany przedmiot o danym tagu podniosłem ? Np. jeżeli dotknę banana o tagu przedmiot to w kolekcji pojawi się banan i jego dane a jak inny przedmiot to pojawia się jego dane :

public List<Items> listaPodniesionychPrzedmiotow = new List<Items>();


    public GameObject panelPodniesionePrzedmiotu;
    IdPodniesionePrzedmiotu id = new IdPodniesionePrzedmiotu();
    AudioSource audioSource;
    public AudioClip audioClip;

    public Image[] ikonyEkwipunku;

    public Image[] IkonyEkwipunku
    {
        get { return ikonyEkwipunku; }
        set { ikonyEkwipunku = value; }
    }
    public Sprite ikonaJablka;
    public Sprite ikonaBanana;
    public Sprite ikonaTruskawki;
    public Sprite ikonaKiwi;
    public Sprite ikonaGruszka;
    public Sprite ikonaMuchomora;
    public Sprite zwyklyMieczJednoreczny;
    public Sprite zwyklyToporekJednoreczny;
    public Sprite zwyklyMieczDwureczny;


    // Use this for iniialization
    void Start()
    {
        panelPodniesionePrzedmiotu.SetActive(false);
        id = new IdPodniesionePrzedmiotu();
        audioSource = GetComponent<AudioSource>();

        ikonyEkwipunku[0].enabled = false;
        ikonyEkwipunku[1].enabled = false;
        ikonyEkwipunku[2].enabled = false;
        ikonyEkwipunku[3].enabled = false;
        ikonyEkwipunku[4].enabled = false;
        ikonyEkwipunku[5].enabled = false;
        ikonyEkwipunku[6].enabled = false;
        ikonyEkwipunku[7].enabled = false;
        ikonyEkwipunku[8].enabled = false;
        ikonyEkwipunku[9].enabled = false;
        ikonyEkwipunku[10].enabled = false;
        ikonyEkwipunku[11].enabled = false;
        ikonyEkwipunku[12].enabled = false;
        ikonyEkwipunku[13].enabled = false;
        ikonyEkwipunku[14].enabled = false;
        ikonyEkwipunku[15].enabled = false;
        ikonyEkwipunku[16].enabled = false;
        ikonyEkwipunku[17].enabled = false;
        ikonyEkwipunku[18].enabled = false;
        ikonyEkwipunku[19].enabled = false;
        ikonyEkwipunku[20].enabled = false;
        ikonyEkwipunku[21].enabled = false;
        ikonyEkwipunku[22].enabled = false;
        ikonyEkwipunku[23].enabled = false;
        ikonyEkwipunku[24].enabled = false;
        //  ikonyEkwipunku[25].enabled = false;

    }

    // Update is called once per frame
    void Update()
    {
        //if(listaPodniesionychPrzedmiotow.Count >= 10)
        //{

        //}
    }
    private void OnTriggerEnter(Collider other)
    {

        if (other.gameObject.tag == "Jablko")
        {
            Debug.Log("Jablko");
            audioSource.PlayOneShot(audioClip);
            Destroy(other.gameObject);
            //panelPodniesionePrzedmiotu.SetActive(true);
            id.idPodniesionegoPrzedmiotu = BazaDanychInwentarz.bazaDanych[0].idElementu;
            listaPodniesionychPrzedmiotow.Add(new Items(BazaDanychInwentarz.bazaDanych[0].idElementu, BazaDanychInwentarz.bazaDanych[0].nazwaElementu,
                        BazaDanychInwentarz.bazaDanych[0].iloscZycia, BazaDanychInwentarz.bazaDanych[0].typElementu));

            if (ikonyEkwipunku[0].sprite == null)
            {
                ikonyEkwipunku[0].enabled = true;
                ikonyEkwipunku[0].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[1].sprite == null)
            {
                ikonyEkwipunku[1].enabled = true;
                ikonyEkwipunku[1].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[2].sprite == null)
            {
                ikonyEkwipunku[2].enabled = true;
                ikonyEkwipunku[2].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[3].sprite == null)
            {
                ikonyEkwipunku[3].enabled = true;
                ikonyEkwipunku[3].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[4].sprite == null)
            {
                ikonyEkwipunku[4].enabled = true;
                ikonyEkwipunku[4].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[5].sprite == null)
            {
                ikonyEkwipunku[5].enabled = true;
                ikonyEkwipunku[5].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[6].sprite == null)
            {
                ikonyEkwipunku[6].enabled = true;
                ikonyEkwipunku[6].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[7].sprite == null)
            {
                ikonyEkwipunku[7].enabled = true;
                ikonyEkwipunku[7].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[8].sprite == null)
            {
                ikonyEkwipunku[8].enabled = true;
                ikonyEkwipunku[8].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[9].sprite == null)
            {
                ikonyEkwipunku[9].enabled = true;
                ikonyEkwipunku[9].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[10].sprite == null)
            {
                ikonyEkwipunku[10].enabled = true;
                ikonyEkwipunku[10].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[11].sprite == null)
            {
                ikonyEkwipunku[11].enabled = true;
                ikonyEkwipunku[11].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[12].sprite == null)
            {
                ikonyEkwipunku[12].enabled = true;
                ikonyEkwipunku[12].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[13].sprite == null)
            {
                ikonyEkwipunku[13].enabled = true;
                ikonyEkwipunku[13].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[14].sprite == null)
            {
                ikonyEkwipunku[14].enabled = true;
                ikonyEkwipunku[14].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[15].sprite == null)
            {
                ikonyEkwipunku[15].enabled = true;
                ikonyEkwipunku[15].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[16].sprite == null)
            {
                ikonyEkwipunku[16].enabled = true;
                ikonyEkwipunku[16].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[17].sprite == null)
            {
                ikonyEkwipunku[17].enabled = true;
                ikonyEkwipunku[17].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[18].sprite == null)
            {
                ikonyEkwipunku[18].enabled = true;
                ikonyEkwipunku[18].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[18].sprite == null)
            {
                ikonyEkwipunku[18].enabled = true;
                ikonyEkwipunku[18].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[19].sprite == null)
            {
                ikonyEkwipunku[19].enabled = true;
                ikonyEkwipunku[19].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[20].sprite == null)
            {
                ikonyEkwipunku[20].enabled = true;
                ikonyEkwipunku[20].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[21].sprite == null)
            {
                ikonyEkwipunku[21].enabled = true;
                ikonyEkwipunku[21].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[22].sprite == null)
            {
                ikonyEkwipunku[22].enabled = true;
                ikonyEkwipunku[22].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[23].sprite == null)
            {
                ikonyEkwipunku[23].enabled = true;
                ikonyEkwipunku[23].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[24].sprite == null)
            {
                ikonyEkwipunku[24].enabled = true;
                ikonyEkwipunku[24].sprite = ikonaJablka;
            }
            else if (ikonyEkwipunku[25].sprite == null)
            {
                ikonyEkwipunku[25].enabled = true;
                ikonyEkwipunku[25].sprite = ikonaJablka;
            }
        }

Bo nie chce sprawdzać każdego elementu kolekcji po kolei ? Z góry dziekuje za pomoc

0

Przydałby się foreach dla inicjalizacji macierzy oraz później do jej modyfikacji. Kompletnie nie znam C#, więc mogę co najwyżej pseudokodem rzucić. Tak więc zamień to:

ikonyEkwipunku[0].enabled = false;
ikonyEkwipunku[1].enabled = false;
ikonyEkwipunku[2].enabled = false;
ikonyEkwipunku[3].enabled = false;
ikonyEkwipunku[4].enabled = false;
ikonyEkwipunku[5].enabled = false;
ikonyEkwipunku[6].enabled = false;
ikonyEkwipunku[7].enabled = false;
ikonyEkwipunku[8].enabled = false;
ikonyEkwipunku[9].enabled = false;
ikonyEkwipunku[10].enabled = false;
ikonyEkwipunku[11].enabled = false;
ikonyEkwipunku[12].enabled = false;
ikonyEkwipunku[13].enabled = false;
ikonyEkwipunku[14].enabled = false;
ikonyEkwipunku[15].enabled = false;
ikonyEkwipunku[16].enabled = false;
ikonyEkwipunku[17].enabled = false;
ikonyEkwipunku[18].enabled = false;
ikonyEkwipunku[19].enabled = false;
ikonyEkwipunku[20].enabled = false;
ikonyEkwipunku[21].enabled = false;
ikonyEkwipunku[22].enabled = false;
ikonyEkwipunku[23].enabled = false;
ikonyEkwipunku[24].enabled = false;

na coś w tym stylu:

foreach (Image image in ikonyEkwipunku)
{
  image.enabled = false;
}

oraz tę długaśną drabinkę ifów na coś w tym stylu:

foreach (Image image in ikonyEkwipunku)
{
  if (image.sprite == null)
  {
    image.enabled = true;
    image.sprite = ikonaJablka;
  }
}

Powinieneś najpierw ogarnąć podstawy języka, zanim zabierzesz się za pisanie gier.

1

Trochę zagmatwałeś sobie robotę. Zrób odpowiednie ScriptableObjecty dla Twoich itemów.
Jak zrobisz skrypt itema, to obiektowi w edytorze możesz przypisać sprite, id, itp. Nie musisz tego robić w kodzie.
Wszystkie itemy będziesz mógł w edytorze przypisać do jakiegoś globalnego skryptu dodanego do obiektu na scenie - żeby móc spawnować odpowiednie itemy itp.
Niech Twoja postać do listy itemów dodaje tylko scriptable object danego itema. Jeśli ten scriptable object będzie przypisany do obiektu z triggerem, to automatycznie ten trigger będzie wiedział co robić - wykasowanie swojego gameObjectu i dodanie scriptable objectu itema do listy itemów postaci.

Wizualizację ekwipunku w grze możesz zrobić na zasadzie:

  1. Wykasuj wszystkie elementy graficzne.
  2. Wygeneruj ekwipunek na postawie listy itemów.

Za każdym razem gdy coś się zmieni, np. postać użyje item, albo dobierze nowy, będziesz wykonywał te dwa kroki.
Zawsze w pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1