BoundsControl — MRTK3
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.
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.
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.
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ą DragToggleThreshold
metody , a to zachowanie aktywacji można włączyć/wyłączyć za pomocą ToggleHandlesOnClick
właściwości .
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
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.