Przechowywanie informacji o przedmiotach

Witam w kolejnym wpisie poświęconym tworzeniu rozbudowanemu systemowi ekwipunku.

Od tej części zacznę wprowadzać metody składowania naszych przedmiotów, które mogą wystąpić w grze.

Najprostszym i najczęściej stosowanym sposobem jest pisanie klasy która składa się z listy przedmiotów, i w kodzie tej klasy dodaje się do niej kolejne przedmioty o określonych parametrach. Jest to rozwiązanie najczęściej spotykane w wielu poradnikach o tworzeniu takich ekwipunków. Nie jest ono według mnie do końca złe, lecz może być problematyczne w momencie gdy ktoś kto nie potrafi programować ma za zadanie tworzyć przedmioty lub gdy trzeba dodawać na prawdę dużo przedmiotów.Wtedy kod klasy rośnie i rośnie.

Nie wiele zmieniłem w klasach napisanych ostatnio. Właściwie to tylko dodałem nowy konstruktor w klasie Item:

Item.cs


public Item(string name,string description)
 {
 this.Name = name;
 this.Description = description;
 }

 

W ten sposób mogę już w bardzo prosty sposób tworzyć przedmioty do ekwipunku.

Teraz pozostaje jedynie stworzyć klasę składującą takie przedmioty, ja ją nazwałem ItemList, ponieważ w rzeczywistości posiada ona tylko listę przedmiotów:

ItemList.cs


namespace Assets.Scripts.Items
{
public class ItemList : MonoBehaviour
{
public List<Item> Items;

void Start()
{
Items = new List<Item>();

Items.Add(new Item("Iron Sword","Two-handed iron sword"));
Items.Add(new Item("Frostmourne", "Weapon made by The Lich King"));
Items.Add(new Item("New Item3", "It's only an Item"));

for (int i = 0; i < Items.Count; i++)
{
if(Items[i].ID == null)
{
Items[i].ID = i;
}
}
}
}
}

Przeanalizujmy teraz powyższy kod. Najpierw tworzę liste wszystkich przedmiotów, a w funkcji Start, a więc na początku gry ją inicjalizuje i dodaje do niej w tej metodzie moje 3 przedmioty, po czym po pętli zmieniam ich ich na kolejno od zera do liczby o 1 mniejszej od rozmiaru listy. Ta klasa dziedziczy po MonoBehaviour, a więc jest ona skryptem i by mieć dostęp do przedmiotów musimy ją gdzieś dodać, a później po prostu się odnieść w innym skrypcie do jakiegokolwiek przedmiotu w ten sposób.


//...

ItemList list = ItemListHolder.GetComponent<ItemList>();

list.Items[1].Name = "New Item1";

//...

Gdzie ItemListHolder to po prostu jakiś obiekt zawierający ten skrypt.

To by było na tyle jeśli chodzi o ten sposób, wkrótcę zacznę tworzyć bardziej złożoną metode, która na pewno będzie opisywana na przynajmniej 3 wpisach.

 

 

 

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s