Ustawienia kontekstowe narzędzi do blokowania i menedżera

Kontekst narzędzi do blokowania świata umożliwia parametryczne dostosowywanie Menedżera narzędzi blokowania świata w inspektorze aparatu Unity.

Podczas gdy składnik WorldLockingContext przedstawia interfejs użytkownika dla WorldLockingManager, ważne jest, aby zrozumieć, że nie są one takie same, a w niektórych sytuacjach ważne może być zrozumienie ich relacji.

Menedżer jest singleton

WorldLockingManager to pojedynczy element utworzony na żądanie i utrzymujący się przez cały okres istnienia aplikacji. Jeśli żadne wywołania nie są wykonywane do WorldLockingManager, nigdy nie zostanie utworzone wystąpienie. Po utworzeniu wystąpienia aplikacja pozostanie aktywna do momentu zamknięcia aplikacji. Nigdy nie jest niszczony i ponownie tworzone.

WorldLockingManager nie jest obiektem Aparatu Unity, jest to ogólna klasa języka C#. Jego aktualizacja jest oparta na składniku proxy Unity, wystąpieniu prywatnej klasy WorldLockingManager.UpdateProxy. W przeciwnym razie jest niezależny od cykli tworzenia/aktualizowania/niszczenia aparatu Unity.

Kontekst jest składnikiem aparatu Unity

WorldLockingContext to składnik aparatu Unity, który jest dodawany do obiektu w scenie w zwykły sposób. Pola są wyświetlane w inspektorze aparatu Unity, podobnie jak w przypadku innych pól składnika aparatu Unity.

Chociaż nie jest to błąd, aby mieć wiele aktywnych elementów WorldLockingContexts w jednej scenie, prawdopodobnie nie jest to pożądane, ponieważ zachowanie byłoby niezdefiniowane, zależne od nieznanej kolejności ładowania obiektów.

Ustawienia kontekstu są stosowane po załadowaniu elementu WorldLockingContext. W szczególności kontekst wypycha jego ustawienia do Menedżera narzędzi blokady świata w wywołaniu OnEnable, a za każdym razem, gdy jego scena stanie się aktywna. Ten ostatni jest stosowany jako część wywołania zwrotnego Unity.SceneManager.activeSceneChanged, jeśli i tylko wtedy, gdy nowa aktywna scena jest sceną, do którego należy kontekst.

Wszystkie ustawienia mogą być stosowane ze skryptu

W dowolnym momencie w środowisku uruchomieniowym aplikacja może stosować ustawienia niestandardowe do elementu WorldLockingManager za pomocą skryptu. Jeśli jakiekolwiek rozerwanie i ponowne kompilowanie zasobów jest wymagane w celu wprowadzenia zmian w ustawieniach, ta rekonstrukcja zostanie natychmiast zmieniona.

Chociaż istnieją pewne wygodne elementy członkowskie, aby uzyskać poszczególne wartości właściwości z WorldLockingManager, na przykład Autozapis, ustawienie parametrów zawsze odbywa się w agregacji. Na przykład kod umożliwiający przełączenie funkcji Automerge i AutoRefreeze może wyglądać następująco:

/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;

Podobnie w przypadku ustawień diagnostycznych.

Należy pamiętać, że zmiana wielu ustawień jednocześnie w ten sposób wiąże się tylko z kosztem pojedynczej ponownej kompilacji (jeśli jest to wymagane).

pierwszeństwo Ustawienia

Reguły dotyczące ustawień aktualnie stosowanych do worldLockingManager są bardzo proste:

  1. Jeśli nie załadowano sceny zawierającej kontekst i nie ustawiono jawnie ustawień ze skryptu, właściwość WorldLockingManager ma ustawienia domyślne.

  2. Ustawienie zachowa jego wartość do momentu zastąpienia go przez ładowanie WorldLockingContext ze sceną lub jawną zmianę wywołaną z aplikacji w skrycie.

Należy zachować ostrożność podczas mieszania ustawień Menedżera narzędzi blokowania świata z kontekstów i ustawień skryptów. Ponieważ kontekst zawsze stosuje ustawienia ładowania, skrypt ręcznie stosujący ustawienie podczas ładowania, szczególnie z wywołania zwrotnego OnEnable, prawdopodobnie napotka warunki wyścigu i nieokreślone zachowanie.

Dostępne ustawienia

Dostępne ustawienia kontrolowania zachowania narzędzia do blokowania świata są podzielone na grupy w następujący sposób.

Podstawowa konfiguracja kontekstu blokującego świat

Ustawienia automatyzacji

Ustawienia automatyzacji kontrolują zachowanie środowiska uruchomieniowego Menedżera narzędzi blokowania świata. Pola dostępne do modyfikacji i ich implikacje są udokumentowane w klasie Manager Ustawienia. Koncentrują się one na włączaniu lub wyłączaniu automatycznych akcji okresowych przez menedżera. Zamiast tego można ręcznie wykonać dowolną wyłączoną akcję automatyczną.

Sekcja automatyzacji kontekstu

Ustawienia połączenia

Ustawienia łączenia służą do jawnego definiowania sceny GameObjects , której przekształcenia będą używane do stosowania poprawek narzędzi do blokowania świata.

Sekcja połączenia kontekstu

Pole "Użyj istniejącej" umożliwia ustawienie połączonych obiektów raz w scenie za pomocą platformy aparatu (z wartością "Użyj istniejącej" fałsz) i nie jest zastępowane przez ładowanie kolejnych scen zawartości (z wartością "Użyj istniejącej" true).

Z drugiej strony ustawienie "Użyj istniejącej" w celu fałszu zezwala wielu scenom z inną platformą aparatu na powiązanie z odpowiednimi miejscami w hierarchii aparatu.

Podczas tworzenia hierarchii aparatów i zarządzania nią na podstawie skryptu pole "Użyj istniejącej" powinno być ustawione na wartość true we wszystkich kontekstach, a powiązania zostały jawnie zaktualizowane z poziomu skryptów zarządzania kamerą.

Jeśli wymagane przekształcenia nie zostaną dostarczone, pozostawiono wartość null lub wszystkie konteksty mają wartość "Użyj istniejącej", a następnie system wyświetla ostrzeżenie i próbuje wywnioskować dobre opcje. Zaleca się, ale nie jest to wymagane, aby jawnie ustawić odpowiednie przekształcenia, zamiast odgadnąć system.

W tym miejscu dostępne są dwie dodatkowe opcje, które kontrolują sposób stosowania korekty transformacji aparatu.

Pierwsze pole wyboru dla opcji "Zastosuj korektę" domyślnie jest włączone. Informuje to system o zastosowaniu obliczonej poprawki kamery każdej ramki do "Korekta ramki". GameObject Wyłączenie tej funkcji jest bardzo zaawansowaną funkcją i powinno zostać wypróbowane tylko po rozwiązaniu wszystkich innych problemów i uzyskaniu głębokiego zrozumienia narzędzi do blokowania świata. Krótko mówiąc, informuje system, że korekta aparatu nie ma być stosowana do aparatu, ale zostanie zastosowana w inny sposób. Zazwyczaj odbywa się to za pośrednictwem AlignSubtree składnika, ale nie musi być.

Drugie pole wyboru dla opcji "No Pitch And Roll" informuje system o zerowym wyrzuceniu dowolnego rzutu i rzutowania obliczonego w transformacji z Playspace do zablokowanego miejsca. (Zobacz tę dyskusję na temat przestrzeni współrzędnych WLT). Nie ma to wpływu na rotację stosowaną przez SpacePin system, ale wpływa tylko na światową korektę aparatu fotograficznego obliczoną przez Frozen World Engine.

Ustawienia zarządzania kotwicą

Ustawienie Zarządzanie kotwicą spowoduje jawne wybranie systemu śledzenia zakotwiczenia. To zaznaczenie jest obecnie wykonywane tylko podczas uruchamiania i po wybraniu nie można zmienić.

Inne ustawienia umożliwiają kontrolę nad gęstością bazowego grafu zakotwiczenia wewnętrznego. Mogą one zostać zmienione w dowolnym momencie, chociaż ich efekt może zająć trochę czasu, aby propagować je za pośrednictwem grafu wewnętrznego.

W przypadku pokrycia bardzo dużych obszarów można zmniejszyć gęstość wewnętrznego grafu kotwicy, aby poświęcić dokładność wydajności. Zwiększenie minNewAnchorDistance robi to. Zwiększenie minimalnej odległości wymaganej przed dodaniem nowej kotwicy wewnętrznej zwiększa odstęp między kotwicami, a więc gęstość kotwic się zmniejsza.

Należy zauważyć, że aby przejść test tworzenia krawędzi, maxAnchorEdgeLength musi być większy niż MinNewAnchorDistance. W praktyce maxAnchorEdgeLength 10-20% większy niż MinNewAnchorDistance działa dobrze.

Parametr MaxLocalAnchors, zamiast modyfikować gęstość, ogranicza bezpośrednio liczbę kotwic wewnętrznych. Obecnie, gdy liczba kotwic przekracza limit, kotwice najbardziej odległe od aparatu są odzyskiwanych, aby obniżyć liczbę. Jednak inne algorytmy są interesujące i badane, więc aplikacja nie powinna zależeć od tej konkretnej implementacji.

Sekcja zarządzania kotwicą kontekstu

Więcej szczegółów zawiera dokument w ramach struktury Anchor Ustawienia.

Ustawienia diagnostyczne

Ustawienia diagnostyki kontrolują zbieranie danych diagnostycznych na potrzeby analizy zachowania i debugowania. Powinny one być zwykle pozostawione z zestawem "Użyj wartości domyślnych", który między innymi wyłącza zbieranie danych diagnostycznych. Kolekcja diagnostyki jest doskonałym przeciągnięciem wydajności, dlatego należy unikać, chyba że jest to konieczne.

Sekcja diagnostyki kontekstu

Podczas opracowywania, gdy jest widoczne nieoczekiwane i niepożądane zachowanie, dane diagnostyczne zbierane przez wyłączenie opcji Użyj wartości domyślnych i włączenie diagnostyki Ustawienia. Włączone umożliwi zbieranie danych, które mogą odgrywać kluczową rolę w zrozumieniu i naprawianiu tego zachowania.

Pola dostępne do modyfikacji są opisane w klasie Diagnostics Ustawienia.

Ustawienia domyślne

Ustawienia menedżera i diagnostyki zawierają pole wyboru "Użyj wartości domyślnych" w ustawieniach. Właściwość "Użyj wartości domyślnych" jest również dostępna ze skryptu.

Gdy właściwość "Użyj wartości domyślnych" ma wartość true, są używane bieżące ustawienia domyślne. Jeśli wartości domyślne dla właściwości zmienią się w nowej wersji, właściwość "Użyj wartości domyślnych" nakazuje systemowi użycie nowej wartości właściwości.

Ustawienie właściwości "Użyj wartości domyślnych" na wartość true w dowolnym momencie spowoduje zresetowanie wszystkich wartości do bieżących wartości domyślnych . Aby zablokować wartości w migawki wartości domyślnych w danym momencie, włącz właściwość "Użyj wartości domyślnych", aby zresetować wszystkie pola do bieżących wartości domyślnych, a następnie usuń zaznaczenie pola wyboru, aby uniemożliwić ich zmianę za pomocą aktualizacji.

Zaleca się pozostawienie ustawienia "Użyj wartości domyślnych" na wartość true, z wyjątkiem podczas programowania na potrzeby eksperymentowania i debugowania.

Zobacz też