Udostępnij za pośrednictwem


BoundsControl — MRTK3

Kontrolka Granice

Funkcja BoundsControl udostępnia pole ograniczenia o automatycznym rozmiarze wraz z przystępnymi cenami manipulowania rotacją i skalowaniem.

W zestawie NARZĘDZI MRTK 2.x funkcja BoundsControl została wygenerowana głównie przez środowisko uruchomieniowe przy użyciu konfiguracji ScriptableObjects. W narzędziu MRTK3 konfiguracja i dostosowywanie funkcji BoundsControl została znacznie uproszczona. Wizualizacje i uchwyty granic są po prostu dostosowywalnym prefabem, który tworzy wystąpienie BoundsControl w czasie wykonywania. Deweloperzy mogą dostosowywać i dostosowywać wizualizacje prefab, a nawet tworzyć nowe wizualizacje granic od podstaw. Udostępniamy standardowe implementacje wizualizacji granic, postępując zgodnie z nowym językiem projektowania Mixed Reality.

Nowe wizualizacje oferują usprawnione opinie wizualne, które ilustrują intencję użytkownika i manipulowanie obiektem z minimalnym natrętnymi szumami wizualnymi.

Konfigurowanie

Wystarczy dodać element BoundsControl do istniejącego obiektu i wypełnić BoundsVisualsPrefab odwołanie wizualizacjami powiązanymi, których chcesz użyć. Udostępniamy kilka wstępnie utworzonych wizualizacji granic, których można użyć.

Ważne

Zdecydowanie zalecamy, aby deweloperzy dodali polecenie MinMaxScaleConstraint , aby uniemożliwić użytkownikowi skalowanie obiektu do nieużywanego lub dużego rozmiaru.

Aby użyć intencji i efektów fokusu wizualizacji granic, musisz mieć obiekt StatefulInteractable . Jeśli interakcja nie jest wykrywana automatycznie, możesz określić połączenie w inspektorze BoundsControl.

Uwaga

Zalecamy, aby deweloperzy używali obiektu ObjectManipulator wraz z elementem BoundsControl , aby oferować użytkownikom bezpośrednie manipulowanie, a także manipulowanie oparte na przystępności. ObiektManipulator może służyć jako StatefulInteractable dla stanów aktywowania/fokusu, na które odpowiadają wizualizacje granic.

Ograniczenia wizualizacji prefab

Oferujemy kilka wstępnie utworzonych wizualizacji granic do użycia z funkcją BoundsControl. Deweloperzy są zachęcani do tworzenia wariantów wstępnych tych wizualizacji i dostosowywania ich do swoich potrzeb. Obsługa animacji i stanów jest obsługiwana przez stateVisualizer, umożliwiając deweloperom dalsze dostosowywanie wyglądu i działania przystępnych cen.

Obsługa stylu oklusionu

Te wizualizacje granic oferują uproszczony projekt wizualny z mniejszą liczbą rozproszenia uwagi dla użytkownika. Widoczne będą tylko odpowiednie uchwyty wzdłuż krawędzi granic. Kontrakt wizualizacji powiązanych, rozwiń i zmień kolor/grubość w zależności od intencji użytkownika i postępu wyboru. Zdecydowanie zalecamy używanie tego stylu wizualizacji granic.

Occluded uchwyty

Tylko intencje

W niektórych kontekstach uchwyty mogą być niepożądane, a deweloperzy mogą chcieć użyć samych wizualizacji granic jako wspaniałego wskaźnika intencji użytkownika. Chociaż ten prefab wykonuje zadanie, ten sam efekt można osiągnąć przy użyciu dowolnej z innych wizualizacji granic, wybierając pozycję HandleType.None. Odkryliśmy, że wizualizacje z możliwością ściskania granic są satysfakcjonującym i zachwycającym elementem opinii wizualnej dla wielu różnych kontekstów, a nie tylko do manipulowania opartego na obsłudze.

Brak uchwytów

Styl starszej wersji

Te wizualizacje granic pokazują wszystkie uchwyty i krawędzie pola. Jest to bardziej zgodne ze starszym językiem projektowania i poprzednim zachowaniem widocznym w zestawie NARZĘDZI MRTK 2.x; jednak ten projekt może być bardziej rozpraszający dla użytkowników z powodu niepotrzebnego szumu wizualnego. Ponadto obecność uchwytów znajdujących się przed obiektem (i za nim) może powodować problemy z pośrednim manipulowaniem spojrzeniem. Nie zalecamy używania tego stylu dla nowych aplikacji, zwłaszcza tych korzystających z kierowania spojrzeniem.

Tradycyjne uchwyty

Projekt interakcji

W bieżącej iteracji oferujemy prostą interakcję aktywacji/dezaktywacji. Klikając granice w miejscu (innymi słowy, wybierając obiekt, nie przenosząc go i zwalniając), uchwyty można włączać i wyłączać. Tolerancja odległości dla tego sprawdzania można dostosować za pomocą DragToggleThresholdmetody , a to zachowanie aktywacji można włączyć/wyłączyć za pomocą ToggleHandlesOnClick właściwości .

Przełącznik kontrolki Granice

Uchwyty można aktywować ręcznie lub dezaktywować z kodu w dowolnym momencie, ustawiając wartość HandlesActive.

Obliczanie automatycznych granic

Funkcja BoundsControl spróbuje automatycznie obliczyć granice skojarzonego obiektu. Jeśli żądany jest określony kształt granic, zaznacz OverrideBounds opcję i określ obiekt granic bezpośrednio. System obliczania granic oblicza tylko granice dla określonego obiektu przesłonięcia.

Wpływa BoundsCalculationMethod to na sposób obliczania granic przez algorytm. Jeśli kształt wizualizacji obiektu ujętego nie musi być zgodny z zderzaczem lub odwrotnie jest prawdą, deweloperzy mogą dostosować metodę obliczania, aby preferować używanie granic modułu renderowania lub zderzacza lub kombinacji obu tych elementów.

Niezależnie od metody Padding obliczeniowej opcja będzie wypełniać granice jednolicie w jednostkach świata. Gdy granice są spłaszczone, oś spłaszczone nie jest dopełniona.

Spłaszczanie

Spłaszczone graniceControl

Element BoundsControl umożliwia również manipulowanie zawartością 2D. Jeśli FlattenMode ustawiono wartość Auto, element BoundsControl spłaszczy się do granic prostokątnych 2D, jeśli obiekt jest wystarczająco płaski wzdłuż dowolnej osi. Jeśli obiekt nie jest wystarczająco płaski, ale nadal chcesz, aby prostokątne granice zapewniały dostępność, FlattenMode.Always zawsze spłaszczyć element BoundsControl wzdłuż najskórszej osi. Z drugiej strony FlattenMode.Never uniemożliwi spłaszczanie kontrolek BoundsControl, nawet jeśli obiekt jest bardzo cienki.

Opcje manipulowania

Zachowanie manipulowania elementem BoundsControl można dostosować na kilka sposobów. Opcja RotateAnchor steruje punktem przestawnym, wokół którego jest obracana kontrolka BoundsControl podczas korzystania z przystępności rotacji. Punkty przestawne niektórych obiektów są dalekie od ich środka wizualnego, co może powodować dyskomfort i nieprecyzyjny podczas manipulowania uchwytami obrotu. Określenie BoundsCenter wartości RotateAnchor spowoduje, że funkcja BoundsControl będzie zawsze obracać się wokół środka geometrycznego obliczonych granic, a nie rzeczywistego źródła obiektu.

Zachowanie skalowania można ustawić na Uniform wartość lub Non Uniform. W trybie mundurowym wszystkie osie obiektu są skalowane razem, zachowując współczynnik proporcji i wygląd. Skalowanie bez munduru umożliwia niezależne skalowanie każdej osi obiektu.