Kontrolka Granice — MRTK2
BoundsControl to nowy składnik do manipulowania zachowaniem, który został wcześniej znaleziony w usłudze BoundingBox. Kontrolka Granice wprowadza szereg ulepszeń i upraszcza konfigurację i dodaje nowe funkcje. Ten składnik jest zamiennikiem pola ograniczenia, które zostanie wycofane.
Skrypt BoundsControl.cs
udostępnia podstawowe funkcje przekształcania obiektów w rzeczywistości mieszanej. Kontrolka granic wyświetli pole wokół hologramu, aby wskazać, że można z nim korzystać. Uchwyty na rogach i krawędziach pola umożliwiają skalowanie, obracanie lub tłumaczenie obiektu. Kontrolka granic reaguje również na dane wejściowe użytkownika. Na HoloLens 2 na przykład kontrolka granic reaguje na bliskość palca, zapewniając wizualną opinię, aby ułatwić postrzeganie odległości od obiektu. Wszystkie interakcje i wizualizacje można łatwo dostosować.
Przykładowa scena
Przykłady konfiguracji kontrolek granic można znaleźć w scenie BoundsControlExamples
.
Właściwości inspektora
Obiekt docelowy
Ta właściwość określa, który obiekt zostanie przekształcony przez manipulowanie kontrolką granic. Jeśli żaden obiekt nie jest ustawiony, domyślnie jest to obiekt właściciela.
Zachowanie aktywacji
Istnieje kilka opcji aktywowania interfejsu sterowania granic.
- Aktywuj przy uruchamianiu: kontrolka Granice staje się widoczna po uruchomieniu sceny.
- Aktywowanie za pomocą zbliżenia: kontrolka Granice staje się widoczna, gdy wyartykułowana ręka znajduje się blisko obiektu.
- Aktywuj według wskaźnika: kontrolka Granice staje się widoczna, gdy jest ona objęta wskaźnikiem promienia ręcznego.
- Aktywuj za pomocą zbliżenia i wskaźnika: kontrolka Granice staje się widoczna, gdy jest ona objęta wskaźnikiem promienia ręcznego lub przegubową ręką znajduje się blisko obiektu.
- Aktywuj ręcznie: kontrolka Granice nie staje się widoczna automatycznie. Możesz ją ręcznie aktywować za pomocą skryptu, korzystając z właściwości boundsControl.Active.
Przesłonięcia granic
Ustawia zderzacz pola z obiektu na potrzeby obliczeń granic.
Dopełnianie do pudełka
Dodaje dopełnienie do granic zderzaków używanych do obliczania zakresów kontrolki. Wpłynie to nie tylko na interakcję, ale także na wizualizacje.
Oś spłaszczana
Wskazuje, czy kontrolka jest spłaszczone w jednej z osi, co czyni ją 2 wymiarami i nie zezwala na manipulowanie wzdłuż tej osi. Tej funkcji można używać w przypadku obiektów cienkich, takich jak slates. Jeśli oś spłaszczona jest ustawiona na Spłaszczaj automatycznie , skrypt automatycznie wybierze oś z najmniejszym zakresem jako osi spłaszczaną.
Wygładzanie
Sekcja wygładzania umożliwia skonfigurowanie zachowania wygładzania na potrzeby skalowania i obracania kontrolki.
Wizualizacje
Wygląd kontrolki granic można skonfigurować, modyfikując jedną z odpowiednich konfiguracji wizualizacji. Konfiguracje wizualizacji są połączonymi lub wbudowanymi obiektami skryptowymi i opisano je bardziej szczegółowo w sekcji obiektu konfiguracji.
Obiekty konfiguracji
Kontrolka jest dostarczana z zestawem obiektów konfiguracji, które mogą być przechowywane jako obiekty skryptowe i współużytkowane między różnymi wystąpieniami lub prefabami. Konfiguracje mogą być współużytkowane i połączone jako pojedyncze pliki zasobów z możliwością skryptu lub zagnieżdżone zasoby skryptowe wewnątrz prefab. Dalsze konfiguracje można również zdefiniować bezpośrednio w wystąpieniu bez łączenia się z zewnętrznym lub zagnieżdżonym zasobem skryptowym.
Inspektor kontroli granic wskaże, czy konfiguracja jest współużytkowana, czy w ramach bieżącego wystąpienia, wyświetlając komunikat w inspektorze właściwości. Ponadto wystąpienia udostępnione nie będą edytowalne bezpośrednio w oknie właściwości kontroli granic, ale zamiast tego element zawartości, z którą łączy się, musi być bezpośrednio modfied, aby uniknąć przypadkowych zmian w konfiguracjach udostępnionych.
Obecnie kontrolka granic oferuje opcje obiektów konfiguracji dla następujących funkcji:
Konfiguracja urządzenia Box
Konfiguracja pola jest odpowiedzialna za renderowanie solidnego pola z granicami zdefiniowanymi za pośrednictwem rozmiaru zderzaków i dopełniania skrzynki. Można skonfigurować następujące właściwości:
- Materiał pudełkowy: definiuje materiał zastosowany do renderowanego pola, gdy nie ma żadnej interakcji. Pole będzie renderowane tylko wtedy, gdy ten materiał jest ustawiony.
- Materiał chwyciony w pudełku: materiał do pudełka, gdy użytkownik wchodzi w interakcję z kontrolką, chwytając za pośrednictwem bliskiej lub dalekiej interakcji.
- Skalowanie wyświetlania osi spłaszczonej: skala zastosowana do ekranu pola, jeśli jedna z osi jest spłaszczone.
Konfiguracja uchwytów skalowania
Ta szuflada właściwości umożliwia modyfikowanie zachowania i wizualizacji uchwytów skalowania kontrolki granic.
- Materiał uchwytu: materiał zastosowany do uchwytów.
- Uchwyt chwycił materiał: materiał zastosowany do chwytanego uchwytu.
- Obsługa prefab: opcjonalny prefab dla uchwytu skalowania. Jeśli nie ustawiono zestawu NARZĘDZI MRTK, użyje modułu jako domyślnego.
- Rozmiar uchwytu: rozmiar uchwytu skalowania.
- Dopełnianie zderzacze: dopełnienie, aby dodać do zderzaka uchwytu.
- Rysuj tether podczas manipulowania: gdy aktywny narysuje linię tether od punktu rozpoczęcia interakcji do bieżącej ręki lub położenia wskaźnika.
- Uchwyty ignorują zderzacz: jeśli zderzacz zostanie połączony tutaj, uchwyty zignorują wszelkie kolizje z tym zderzaczem.
- Obsługa prefab łupka: prefab do użycia do uchwytu, gdy kontrolka jest spłaszczone.
- Pokaż uchwyty skalowania: kontroluje widoczność uchwytu.
- Zachowanie skalowania: można ustawić na jednolite lub nieu jednolite skalowanie.
Rotacja obsługuje konfigurację
Ta konfiguracja definiuje zachowanie uchwytu rotacji.
- Materiał uchwytu: materiał zastosowany do uchwytów.
- Uchwyt chwycił materiał: materiał zastosowany do chwytanego uchwytu.
- Obsługa prefab: opcjonalny prefab dla uchwytu. Jeśli nie ustawiono zestawu NARZĘDZI MRTK, użyje sfery jako domyślnej.
- Rozmiar uchwytu: rozmiar uchwytu.
- Dopełnianie zderzacze: dopełnienie, aby dodać do zderzaka uchwytu.
- Rysuj tether podczas manipulowania: gdy aktywny narysuje linię tether od punktu rozpoczęcia interakcji do bieżącej ręki lub położenia wskaźnika.
- Uchwyty ignorują zderzacz: jeśli zderzacz zostanie połączony tutaj, uchwyty zignorują wszelkie kolizje z tym zderzaczem.
- Typ zderzaka przedfabrykowego: typ zderzaczu, który ma być używany z utworzonym uchwytem.
- Pokaż uchwyt dla X: kontroluje widoczność uchwytu dla osi X.
- Pokaż uchwyt dla Y: kontroluje widoczność uchwytu dla osi Y.
- Pokaż uchwyt dla Z: kontroluje widoczność uchwytu dla osi Z.
Konfiguracja obsługi tłumaczenia
Umożliwia włączanie i konfigurowanie uchwytów tłumaczenia dla kontrolki granic. Należy pamiętać, że dojścia tłumaczenia są wyłączone na wartość domyślną.
- Materiał uchwytu: materiał zastosowany do uchwytów.
- Uchwyt chwycił materiał: materiał zastosowany do chwytanego uchwytu.
- Obsługa prefab: opcjonalny prefab dla uchwytu. Jeśli nie ustawiono zestawu NARZĘDZI MRTK, użyje sfery jako domyślnej.
- Rozmiar uchwytu: rozmiar uchwytu.
- Dopełnianie zderzacze: dopełnienie, aby dodać do zderzaka uchwytu.
- Rysuj tether podczas manipulowania: gdy aktywny narysuje linię tether od punktu rozpoczęcia interakcji do bieżącej ręki lub położenia wskaźnika.
- Uchwyty ignorują zderzacz: jeśli zderzacz zostanie połączony tutaj, uchwyty zignorują wszelkie kolizje z tym zderzaczem.
- Typ zderzaka przedfabrykowego: typ zderzaczu, który ma być używany z utworzonym uchwytem.
- Pokaż uchwyt dla X: kontroluje widoczność uchwytu dla osi X.
- Pokaż uchwyt dla Y: kontroluje widoczność uchwytu dla osi Y.
- Pokaż uchwyt dla Z: kontroluje widoczność uchwytu dla osi Z.
Konfiguracja łączy (szkielet)
Konfiguracja łączy umożliwia funkcję szkieletu kontrolki granic. Można skonfigurować następujące właściwości:
- Materiał szkieletowy: materiał zastosowany do siatki szkieletowej.
- Promień krawędzi szkieletu: grubość szkieletu.
- Kształt szkieletu: kształt szkieletu może być sześcienny lub walcowy.
- Pokaż szkielet: kontroluje widoczność szkieletu.
Konfiguracja efektu zbliżeniowego
Pokaż i ukryj uchwyty z animacją na podstawie odległości do rąk. Ma animację skalowania dwuetapowego. Wartości domyślne są ustawiane na zachowanie stylu HoloLens 2.
- Aktywny efekt zbliżeniowy: włączanie aktywacji uchwytu opartego na sąsiedztwie
- Średnia bliskość obiektu: odległość dla skalowania kroku 1.
- Zbliżenie obiektu: odległość do skalowania drugiego kroku
- Dalekoskalowanie: domyślna wartość skalowania elementu zawartości uchwytu, gdy ręce są poza zakresem interakcji kontroli granic (odległość zdefiniowana powyżej przez "Obsługa średniej odległości". Użyj 0, aby ukryć domyślnie uchwyt)
- Średnia skala: skaluj wartość elementu zawartości uchwytu, gdy ręce znajdują się w zakresie interakcji kontroli granic (odległość zdefiniowana powyżej przez polecenie "Obsługa bliskiej odległości". Użyj wartości 1, aby pokazać normalny rozmiar)
- Zamknij skalowanie: skaluj wartość elementu zawartości uchwytu, gdy ręce znajdują się w zakresie interakcji chwytu (odległość zdefiniowana powyżej przez polecenie "Obsługa bliskiej odległości". Użyj 1.x, aby pokazać większy rozmiar)
- Szybkość wzrostu dalekiego wzrostu: Oceń skalowane w pobliżu obiekty skalowane, gdy ręka przechodzi z średniej do dalekiej odległości.
- Średnia szybkość wzrostu: Oceń obiekt skalowany w pobliżu, gdy ręka przechodzi z średniej do bliskiej odległości.
- Zamknij szybkość zwiększania: Oceń skalowany obiekt w pobliżu, gdy ręka przechodzi z bliskiej odległości do środka obiektu.
System ograniczeń
Kontrolka Ograniczenia obsługuje używanie menedżera ograniczeń w celu ograniczenia lub zmodyfikowania zachowania tłumaczenia, rotacji lub skalowania podczas korzystania z uchwytów kontrolek granic.
Inspektor właściwości wyświetli wszystkich dostępnych menedżerów ograniczeń dołączonych do tego samego obiektu gry na liście rozwijanej z opcją przewijania i wyróżniania wybranego menedżera ograniczeń.
Zdarzenia
Kontrolka Bounds udostępnia następujące zdarzenia. W tym przykładzie te zdarzenia są używane do odtwarzania opinii audio.
- Obracanie rozpoczęte: wyzwolone po rozpoczęciu rotacji.
- Obracanie zatrzymane: wyzwolone po zatrzymaniu rotacji.
- Rozpoczęto skalowanie: uruchamia się podczas uruchamiania skalowania.
- Skalowanie zatrzymane: uruchamia się podczas zatrzymywania skalowania.
- Tłumaczenie rozpoczęte: uruchamia się po uruchomieniu tłumaczenia.
- Tłumaczenie zatrzymane: uruchamia się po zatrzymaniu tłumaczenia.
Elastyczne (eksperymentalne)
Elastyczne mogą być używane podczas manipulowania obiektami za pomocą kontrolki granic. Należy pamiętać, że system elastics jest nadal w stanie eksperymentalnym. Aby włączyć elastyczne, połącz istniejący składnik menedżera elastycznych lub utwórz i połącz nowy menedżer elastycznych za pomocą Add Elastics Manager
przycisku.
Style obsługi
Domyślnie po przypisaniu skryptu BoundsControl.cs
będzie wyświetlany uchwyt stylu 1. generacji urządzenia HoloLens. Aby użyć uchwytów w stylu HoloLens 2, należy przypisać odpowiednie uchwyty prefab i materiały.
Poniżej przedstawiono prefabrykaty, materiały i wartości skalowania dla uchwytów kontrolek granic stylu HoloLens 2. Ten przykład można znaleźć w scenie BoundsControlExamples
.
Uchwyty (Konfiguracja dla stylu HoloLens 2)
- Materiał uchwytu: BoundingBoxHandleWhite.mat
- Uchwyt chwycony materiał: BoundingBoxHandleBlueGrabbed.mat
- Skalowanie prefab uchwytu: MRTK_BoundingBox_ScaleHandle.prefab
- Skalowanie prefab uchwytu łupków: MRTK_BoundingBox_ScaleHandle_Slate.prefab
- Rozmiar uchwytu skalowania: 0,016 (1,6 cm)
- Dopełnianie zderzacza uchwytów w skali: 0,016 (sprawia, że chwytalny zderzacz jest nieco większy niż wizualizacja uchwytu)
- Rotacja uchwytu prefab: MRTK_BoundingBox_RotateHandle.prefab
- Rozmiar uchwytu rotacji: 0,016
- Uchwyt obrotu Zderzacz dopełnienie: 0,016 (sprawia, że chwytalny zderzacz nieco większy niż wizualizacja uchwytu)
Zmiany przekształcania za pomocą manipulatora obiektów
Kontrolka granic może być używana w połączeniu z elementem , aby umożliwić manipulowanie określonymi typami ObjectManipulator.cs
(np. przenoszeniem obiektu) bez użycia uchwytów. Procedura obsługi manipulowania obsługuje zarówno jedną, jak i dwuręczną interakcję. Śledzenie ręczne może służyć do interakcji z obiektem z bliska.
Aby krawędzie kontrolek granic zachowywały się tak samo podczas przenoszenia jej przy użyciu ObjectManipulator
dalekiej interakcji, zaleca się połączenie jego zdarzeń dla operacji Manipulowanie rozpoczęte na manipulowaniu / zakończoneBoundsControl.HighlightWires
/ BoundsControl.UnhighlightWires
odpowiednio, jak pokazano na powyższym zrzucie ekranu.
Jak dodać i skonfigurować kontrolkę granic przy użyciu narzędzia Unity Inspector
- Dodawanie zderzaka box do obiektu
- Przypisywanie
BoundsControl
skryptu do obiektu - Konfigurowanie opcji, takich jak metody aktywacji (zobacz sekcję Właściwości inspektora poniżej)
- (Opcjonalnie) Przypisywanie prefabrykatów i materiałów dla kontrolki granic stylu HoloLens 2 (zobacz sekcję Style obsługi poniżej)
Uwaga
Użyj pola Obiekt docelowy i Ograniczenia przesłonięcia w inspektorze, aby przypisać określony obiekt i zderzacz w obiekcie z wieloma składnikami podrzędnymi.
Jak dodać i skonfigurować kontrolkę granic w kodzie
Tworzenie wystąpienia modułu GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Przypisywanie
BoundsControl
skryptu do obiektu z zderzaczem przy użyciu polecenia AddComponent<>()private BoundsControl boundsControl; boundsControl = cube.AddComponent<BoundsControl>();
Skonfiguruj opcje bezpośrednio w kontrolce lub za pomocą jednej z konfiguracji z możliwością skryptu (zobacz sekcję Właściwości inspektora i konfiguracje poniżej)
// Change activation method boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer; // Make the scale handles large boundsControl.ScaleHandlesConfig.HandleSize = 0.1f; // Hide rotation handles for x axis boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
(Opcjonalnie) Przypisz prefabrykaty i materiały do kontrolki granic stylu HoloLens 2. Nadal wymaga to przydziałów przez inspektora, ponieważ materiały i prefabryki powinny być ładowane dynamicznie.
Uwaga
Używanie folderu "Resources" aparatu Unity lub modułu Shader.Find do dynamicznego ładowania cieniowania nie jest zalecane, ponieważ w czasie wykonywania mogą brakować permutacji cieniowania.
BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;
Przykład: Ustawianie minimalnej, maksymalnej skali granic przy użyciu polecenia MinMaxScaleConstraint
Aby ustawić minimalną i maksymalną skalę, dołącz MinMaxScaleConstraint
element do kontrolki. Ponieważ kontrolka granic automatycznie dołącza i aktywuje menedżera ograniczeń, narzędzie MinMaxScaleConstraint zostanie automatycznie zastosowane do zmian transformacji po dołączeniu i skonfigurowaniu.
Możesz również użyć polecenia MinMaxScaleConstraint, aby ustawić minimalną i maksymalną skalę dla ObjectManipulator
wartości .
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Przykład: Dodawanie kontrolki granic wokół obiektu gry
Aby dodać kontrolkę granic wokół obiektu, wystarczy dodać BoundsControl
do niego składnik:
private void PutABoundsControlAroundIt(GameObject target)
{
target.AddComponent<BoundsControl>();
}
Migrowanie z pola ograniczenia
Istniejące prefabryki i wystąpienia korzystające z pola ograniczenia można uaktualnić do nowej kontrolki granic za pośrednictwem okna migracji , które jest częścią pakietu narzędzi MRTK.
W przypadku uaktualniania poszczególnych wystąpień pola ograniczenia istnieje również opcja migracji wewnątrz inspektora właściwości składnika.