Ekwipunek unity 3D

Programowanie w Unity.

Ekwipunek unity 3D

Postprzez podlas » 19 Paź 2018, 15:40

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
podlas
 
Posty: 9
Rejestracja: 25 Kwi 2017, 18:06
Has thanked: 0 time
Been thanked: 0 time

Re: Ekwipunek unity 3D

Postprzez Ether_141 » 19 Paź 2018, 16:21

Najpierw umieść to w znaczniku code. Po co używasz "this"? Wiesz co to są pętle? Zamiast użyć for albo foreach to się tak bawisz...
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Ekwipunek unity 3D

Postprzez podlas » 19 Paź 2018, 16:26

Wiem ze uzyje petli for lub foreach ale jeszcze jest pytanie jak sprawdzić który element podniosłem z inwentarza
podlas
 
Posty: 9
Rejestracja: 25 Kwi 2017, 18:06
Has thanked: 0 time
Been thanked: 0 time

Re: Ekwipunek unity 3D

Postprzez Ether_141 » 19 Paź 2018, 16:41

Weź że to do code porządnie wklej bo ja tu nic nie widze. Nikomu sie nie będzie chciało z tym bawić. Powinno być czytelne. Całe skrypty.
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Ekwipunek unity 3D

Postprzez Hostur » 19 Paź 2018, 18:54

Nie no przynajmniej walczy :)
Przede wszystkim użyj pętli, radze też używać tylko angielskiego w kodzie jeśli chciałbyś kiedyś robić to zawodowo.

Jak pobierasz przedmiot po tagu to musi on też być opisany przez jakiś component w obiektowym sposobie programowania w unity. Tzn musisz mieć chociaż jakąś małą klasę dziedziczącą po monobehaviour, którą nałożysz na prefab przedmiotu po to żebyś mógł pobrać z niego tenże komponent
Kod: Zaznacz wszystko
private void OnTriggerEnter(Collider other)
{
  if tag..
  var itemDescription = other.GetComponent<ItemDescription>();
}
Hostur
 
Posty: 648
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time


Wróć do Skrypty

Kto jest na forum

Użytkownicy przeglądający to forum: Google [Bot] oraz 11 gości