[DependencyAttributes] Atreebooster DI

Tutaj możesz pochwalić się efektami swojego dzieła, lub poznać opinie innych.

[DependencyAttributes] Atreebooster DI

Postprzez kubpica » 21 Wrz 2020, 16:43

Zarządzanie zależnościami w Unity zawsze budziło wiele kontrowersji, każdy ma na to swój sposób. Niektórzy używają wyrafinowanych frameworków, inni uważają, że Unity ma już wbudowane IoC. Postanowiłem jeszcze bardziej zwiększyć kontrowersje, tworząc własne narzędzie do zarządzania zależnościami. Świetnie sprawdza się w moim projekcie, co o tym myślicie?

GitHub: https://github.com/kubpica/AtreeboosterDI
Unity Asset Store: https://assetstore.unity.com/packages/t ... -di-157631

Można powiedzieć, że dla Atreeboostera DI hierarchia stanowi kontener IoC, a użytkownik jedyne co musi zrobić to określić sposób jej przeszukiwania za pomocą intuicyjnych atrybutów. Dostępne są następujące atrybuty:
[Component] - automatycznie znajduje najbardziej prawdopodobny komponent.
[GlobalComponent] - pobiera singleton lub przeszukuje całą hierarchię aż znajdzie komponent oznaczonego typu.
[ChildComponent] - znajduje komponent w dzieciach (następnikach).
[ParentComponent] - znajduje komponent w rodzicach (przodkach).
[SiblingComponent] - znajduje komponent w rodzeństwie.
[FamilyComponent] - znajduje komponent zaczynając przeszukiwanie od rodzica w dół hierarchii.
[FamilyComponent(true)] - szuka we własnym drzewie (przeszukuje hierarchię od korzenia w dół).
[OwnComponent] - próbuje pobrać komponent tylko z samego siebie (z obiektu gry do którego skrypt jest dołączony).
[ReferenceComponent] - szuka w obiektach gry oznaczonych [ReferencePoint].
[Child(nazwa/indeks)] - za pomocą nazwy, wyszukuje obiekt gry będący dzieckiem lub pobiera go za pomocą indeksu.
[Parent(nazwa/indeks)] - za pomocą nazwy, wyszukuje obiekt gry będący rodzicem lub pobiera go za pomocą indeksu.
[Sibling(nazwa/indeks)] - za pomocą nazwy, wyszukuje obiekt gry będący rodzeństwem lub pobiera go za pomocą indeksu.
[Reference(nazwa)] - znajduje najbliższy w hierarchii obiekt gry o podanej nazwie.
[Root] - pobiera obiekt gry będący korzeniem obiektu, do którego podłączony jest skrypt.
Dostępne są dodatkowo parametry nazwane:
string Of - nazwa obiektu w hierarchii, do którego zastosować algorytm danego atrybutu. Jeżeli istnieje wiele obiektów o tej samej nazwie, to znajduje najbliższy z nich.
int Offset - przesunięcie poziomu hierarchii, od którego algorytm zaczyna swoje działanie.
bool Optional - jeżeli ustawiony na false, nowy komponent jest tworzony gdy nie zostanie znaleziony przez algorytm; w przeciwnym razie wyświetlany jest tylko komunikat i zależność jest pomijana.
bool SkipItself - jeżeli ustawiony na true, własny obiekt gry jest pomijany przy wyszukiwaniu; w przeciwnym razie jest uwzględniany.
Aby móc korzystać z tych atrybutów wystarczy umieścić pliki MonoBehaviourExtended.cs i MonoBehaviourSingleton.cs gdzieś w swoim projekcie i tworząc klasy własnych komponentów dziedziczyć po jednej z tych klas. Narzędzie wykorzystuje Awake() - specjalną metodę oferowaną przez API silnika. Oznacza to, że jeżeli sami chcemy jej użyć, to musimy ją ukryć za pomocą słowa kluczowego new i wywołać w niej base.Awake(); - czyli odpowiednik z klasy bazowej. Jeżeli chcemy aby nasza klasa działała jak singleton, to powinniśmy dziedziczyć po klasie MonoBehaviourSingleton w taki sposób:
public class SoundManager : MonoBehaviourSingleton<SoundManager>
Do instancji tej klasy możemy dostać się za pomocą SoundManager.Instance; lub [GlobalComponent] SoundManager soundManager;

Jeżeli podoba Ci się moje narzędzie, to możesz obczaić moją grę na Steam - https://store.steampowered.com/app/1398 ... Editcraft/ Aktualnie kosztuje poniżej dolara, więc jak masz jakieś drobne w portfelu Steam, to zakup tej gry będzie dla mnie wiele znaczyć :)
kubpica
 
Posty: 2
Rejestracja: 21 Wrz 2020, 16:34
Has thanked: 0 time
Been thanked: 0 time

Wróć do Projekty w realizacji i ukończone

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 2 gości

cron