Problem z odczytem zapisanego wcześniej pliku

Programowanie w Unity.

Problem z odczytem zapisanego wcześniej pliku

Postprzez maciejgo » 01 Kwi 2019, 19:14

Witam forumowiczów.
Znalazłem dziwne zachowanie w Unity i chyba dotarłem do ściany;
Zapisuję sobie plik z poziomu skryptu, i chwilę później chcę go wczytać w innym miejscu. Zapisuję z klasy FileStream do katalogu Resources, by potem wygodnie ogarniać wczytywanie funkcją Resources.Load.
Po zapisaniu pliku Unity go nie widzi - sam plik pojawia się na dysku, jest z nim wszytko ok, a mimo to Resources.Load zwraca null. Do momentu aż otworzę inne okno i z powrotem wrzucę Unity na ekran - wtedy Unity "wyczaja" wszystkie zmiany w plikach projektu, i wczytywanie od tego momentu będzie działać.
Pytanie brzmi - czy jest możliwość uruchomienia tego "wyczajania" na żądanie (najlepiej tego jednego konkretnego pliku)? Czy może inna metoda zapisu zagwarantuje natychmiastową widoczność nowego pliku?
Czy po prostu muszę przekombinować na nowo cały moduł? To takie moje luźne podejście do generatora świata gry - po skonfigurowaniu assetu Unity wrzuca wszystkie pliki (ich kopie) z nim związane w zorganizowaną strukturę, stąd całe to zapisywanie/odczytywanie - wydawało mi się, że tak będzie szybciej i bardziej elegancko niż ręcznie :)

Acha. Operacje te wykonują się w trybie edycji, ale w runtime jest tak samo

(path z parametrów zawiera ścieżkę i nazwę pliku, asercje pominąłem dla czytelności)
Zapis :
public void SaveTexture_TGA(string path, Texture2D tex)
{
byte[] bytes = tex.EncodeToTGA(true);

FileStream file = File.OpenWrite(path + ".tga");

file.Write(bytes, 0, bytes.Length);
file.Close();
}

Odczyt:
public Texture2D LoadTexture(string path)
{
var tex = Resources.Load<Texture2D>(path);
if(tex == null)
{
// i zawsze tu jestem, dopóki Unity nie uruchomi swojego "wyczajania" zmian w plikach
return null;
}

return tex;
}

Czego nie widzę? Pomóżcie :)
Pozdrawiam!
maciejgo
 
Posty: 3
Rejestracja: 01 Kwi 2019, 18:16
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z odczytem zapisanego wcześniej pliku

Postprzez Hostur » 01 Kwi 2019, 19:32

Hostur
 
Posty: 707
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z odczytem zapisanego wcześniej pliku

Postprzez maciejgo » 04 Kwi 2019, 14:04

Dzięki za odpowiedź, ale to nie to. Sprawdziłem na innych plikach - jest tak samo. Dopóki środowisko unity nie wczyta zmian w plikach projektu, są one niewidoczne (pomimo tego że fizycznie istnieją). Innego wytłumaczenia tego zjawiska na obecną chwilę nie znam - ale niewykluczone że błądzę :). Czy spotkaliście się z czymś takim?

Pozdrawiam
maciejgo
 
Posty: 3
Rejestracja: 01 Kwi 2019, 18:16
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z odczytem zapisanego wcześniej pliku

Postprzez patrykas1000 » 05 Kwi 2019, 01:26

Nie wiem czy to pomoże, ale jak pracujesz na assetach (wprowadzasz zmiany w plikach .asset) to korzysta się z funkcji setDirty (albo jakoś tak, nie pamiętam dokładnie) która informuje że dane są przestarzałe i silnik musi je zapisać/zaktualizować/wczytać, pamiętam też że była funkcja Assets.Update() która aktualizowała dane w plikach, i chyba refresh która ładowała zmiany do pamięci. Jeżeli chodzi o nazwy funkcji to mogłem się pomylić (szczerze to nie chce mi się sprawdzać) a pamiętam że jak pisałem własny edytor który operował na scriptableObject, to korzystałem z łącznie 3 funkcji do aktualizowania stanu plików.

Jeszcze to co mi się wydaje:
Zapis robisz mechanizmami C# które są całkowicie niezależne od Unity (FileStream, File.OpenWrite) a to oznacza że Unity nie ma prawa wiedzieć o istnieniu tych plików ponieważ Unity by przyspieszyć i zoptymalizować działanie operacji na plikach cache'uje dane o nich, tym samym świeżo stworzony plik przez mechanizmy niezależnie nie jest w cachu Unity.
Wnioski:
Zapisuj plik korzystając z bibliotek Unity.
Ewentualnie poszukaj funkcji odwiedzających te dane. Klasa Assets, AssetsManager itp.
patrykas1000
 
Posty: 343
Rejestracja: 16 Sie 2013, 21:35
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z odczytem zapisanego wcześniej pliku

Postprzez maciejgo » 05 Kwi 2019, 07:25

o właśnie, dzięki za rozjaśnienie :)
w samych assetach nie grzebię, ale jest to pomysł wart rozważenia. Jeszcze raz dzięki!
maciejgo
 
Posty: 3
Rejestracja: 01 Kwi 2019, 18:16
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z odczytem zapisanego wcześniej pliku

Postprzez Ether_141 » 05 Kwi 2019, 17:31

Awatar użytkownika
Ether_141
 
Posty: 427
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time


Wróć do Skrypty

Kto jest na forum

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

cron