Wpis z mikrobloga

Czy mogę czytać wartości ze Scriptable Object bezpośrednio w Update? Czy lepiej przepisać wartość raz na starcie do tymczasowej zmiennej i z niej korzystać? (chodzi o obroty silnika, nie chciałbym żeby mi co obrót coś robił na dysku tak jak to robi np. Debug.Log)

#csharp #unity3d
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@jacku: Myśl o SO jako o typie klasie i tym jakie ma funkcjonalności. Podejrzewam że podobnie jak ja kiedyś ich wizję zaślepia ci fakt że Unity umożliwia ich zapisanie jako asset.

SO nie są w żaden sposób przeznaczone do przechowywania danych czy bycia "plikiem", one są tym samym czym jest MonoBehaviour, po prostu mają bardzo mało funkcji i nie mają rzeczy typu Update, czy OnEnable

PS. To nie jest takie
  • Odpowiedz
@jacku: SO daje taka funckjonalnosć że masz tylko jedna instancje swojej klasy. Czyli jak jakiś skrypt ma referencje i jest ładowany to Unity wstawi Ci ta sama instancję klasy przy deserializacji. Jak ładujesz z Resources to tez jeśli juz gdzieś jest instancja, Unity da Ci ta sama instancję. Więc cały czas masz jedną instancję tego SO(kluczem jest ścieżka w projekcie czy tam guid). Cały koszt tej funckjonalnosci jest ukryty w
  • Odpowiedz
W sumie dłużej o tym myśląc, to żadna klasa chyba nie ma takiej właściwości singletona narzuconej. To co opisujesz to zwykła referencja na "asset"/"plik"/"resource". Opisuje posiadanie referencji na coś poza sceną, ale ciągle możesz mieć wiele instancji tej klasy tylko że inne instancje mogą być w innych plikach lub na scenie. Bo SO bez problemu można serializować na scenie wewnątrz obiektów sceny. I właśnie nie ma żadnego związku pomiędzy SO a byciem
  • Odpowiedz
@draculeq: masz racje, każdy Asset tak się zachowuje jak jest wpięty gdzieś.

Ale wartości do pól w C# sa ładowane przy ładowaniu assetów, propertiesy silnikowe pobierają dane bezpośrednio z kodu C++
  • Odpowiedz