Utrwalanie układów współrzędnych przestrzennych

Ogólnie rzecz biorąc, zalety możliwości trwałości narzędzi world locking tools są bardziej interesujące niż szczegóły ich implementacji.

W związku z tym ten artykuł rozpocznie się od dyskusji na temat środowisk, które umożliwiają trwałość narzędzi do blokowania w świecie. Następnie przyjrzymy się, jak można zarządzać trwałością stanu narzędzi blokowania świata. Następnie zamkniemy krótki szkic tego, jakie dane są zapisywane i ładowane.

Narzędzia do blokowania na całym świecie między sesjami

Zgodnie z definicją w innym miejscu stan zamrożony to wszystkie dane niezbędne do wznowienia bieżącego stabilnego miejsca na świecie.

Głównym narzędziem do utrzymywania narzędzi World Locking Tools jest umożliwienie korzyści z pracy wstępnej sesji, skanowania obszaru i dopasowywania przestrzeni wirtualnej do świata rzeczywistego, do użycia w kolejnych sesjach.

Przywrócenie tego stanu pozwala kolejnym sesjom nie być żmudnym lub czasochłonnym konfiguracją i prosto do środowiska ogniskowego.

Zapisywanie stanu narzędzi blokujących świat

Aby można było go załadować, należy zapisać stan zamrożony.

Najprostszym sposobem zapisania stanu zamrożonego jest włączenie automatycznego zapisywania w Menedżerze narzędzi blokady świata w inspektorze aparatu Unity w kontekście narzędzi blokady świata lub w czasie wykonywania za pomocą skryptu.

Ustawienie stanu Menedżera narzędzi blokowania świata za pomocą skryptu jest wykonywane przez najpierw pobranie stanu, zmianę go w dowolny żądany sposób, a następnie ustawienie stanu z powrotem jako bloku. Aby na przykład przełączyć funkcję autozapisu:

var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;

Jeśli funkcja automatycznego zapisywania przejdzie z włączonej do wyłączonej podczas sesji, nie będą podejmowane dalsze okresowe zapisywanie. Jeśli przejdzie ona z wyłączonej do włączonej, okresowe zapisywanie zostanie rozpoczęte lub wznowione.

Funkcja automatycznego zapisywania będzie aktualizować stan zapisywania, okresowo zapisując bieżący stan asynchronicznie.

Jeśli wymagana jest większa kontrola nad czasem zapisywania stanu, automatyczne zapisywanie może być ustawione na wartość false, a zapisywanie ręczne można wykonać za pomocą skryptu. Zapisywanie asynchroniczne jest łatwo wyzwalane jako:

WorldLockingManager.GetInstance().Save();

Ponieważ zapisywanie jest asynchroniczne, inne próby wywołania Save() , podczas gdy poprzednie zapisywanie jest nadal w toku, zostaną zignorowane.

Ładowanie stanu zamrożonego

Zapisanie stanu zamrożonego może być pożądane, aby ponownie załadować narzędzia World Locking Tools z powrotem do tego stanu, w kolejnej sesji lub nawet później w tej samej sesji.

W miarę zapisywania stanu zamrożonego istnieją dwie ścieżki do ładowania stanu.

Jeśli flaga Autoload w Menedżerze narzędzi do blokowania świata jest włączona, wszystkie poprzednie zapisane stany zostaną załadowane w czasie uruchamiania. Jeśli nie ma zapisanego stanu do załadowania, nie zostanie wygenerowany błąd, a uruchomienie będzie kontynuowane tak, jakby flaga nie została ustawiona.

Ustawienie flagi AutoLoad z wartości false na true (na przykład za pomocą skryptu) w czasie wykonywania nie będzie miało wpływu. Autoładowanie odbywa się przy początkowym obciążeniu lub w ogóle się nie dzieje.

Jednak ładowanie może być inicjowane ze skryptu w dowolnym momencie za pomocą funkcji Load Menedżera narzędzi blokowania świata:

WorldLockingManager.GetInstance().Load();

Podobnie jak w przypadku zapisywania, ładowanie jest wykonywane asynchronicznie. Wszystkie kolejne wywołania ładowania, gdy nadal trwa, będą ignorowane.

Co zostało zapisane?

Dane wymagane do odtworzenia mapowania narzędzi world locking Tools — czyli wyrównania świata wirtualnego do rzeczywistego — można podzielić na cztery grupy.

  • Spatial Anchors: podstawowa sieć kotwic przestrzennych utworzona i utrzymywana wewnętrznie przez menedżera kotwicy narzędzi blokady świata dostarcza wymagane powiązanie ze światem rzeczywistym. Te kotwice są utrwalane za pośrednictwem podstawowego mechanizmu magazynu platformy.

  • Stan aparatu: stan aparatu jest utrwalany, aby umożliwić aparatowi wznowienie jego bieżącego mapowania. Przywrócenie tego stanu powoduje usunięcie takich nieokreślonych wartości jako początkowej pozycji głowy w poprzednich sesjach.

  • Przypinanie spacji: jeśli aplikacja zastosowała kolejne pinezki spacji, aby wymusić wyrównanie współrzędnych modelowania do świata rzeczywistego w dyskretnym zestawie punktów, to mapowanie jest również utrwalane.

  • Współrzędna: Narzędzia do blokowania świata utrwalają przestrzeń współrzędnych względem świata fizycznego, zapisując wewnętrzny graf lokalnych kotwic przestrzennych.

Co nie zostało zapisane?

Ustawienia nie są zapisywane, a narzędzia do blokowania świata nie zapisują ani nie przywracają pojedynczych obiektów aplikacji. Zapisywany jest tylko stan. Wszelkie zmiany konfiguracji przez aplikację — na przykład zmiany wprowadzone za pośrednictwem interfejsu API WorldLockingManager — są resetowane do ich wartości zgodnie z ustawieniem w Inspektorze aparatu Unity za każdym razem, gdy aplikacja zostanie uruchomiona. Lub jeśli nie są ustawione w Inspektorze, są one ustawione na wartości domyślne w kodzie.

Załóżmy na przykład, że aplikacja chce przedstawić użytkownikowi opcję Autozapisuj stan blokowania świata, a preferencja użytkownika będzie utrzymywana między sesjami do czasu zmiany. Następnie aplikacja musi:

  1. Prezentowanie użytkownikowi środowiska użytkownika na potrzeby ustawiania preferencji autozapisu (prawdopodobnie z innymi ustawieniami aplikacji).
  2. Przekaż preferencję użytkownika do menedżera WorldLockingManager.
  3. Zarejestruj preferencję pliku (prawdopodobnie z innymi ustawieniami aplikacji).
  4. Podczas uruchamiania aplikacji załaduj zapisaną preferencję (jeśli została zapisana) i prześlij dalej do aplikacji WorldLockingManager.

Zobacz uwagi w worldLockingContext dotyczące problemów z chronometrażem podczas mieszania ustawień stanu między elementami zawartości i skryptem.

Zobacz też