Pole ograniczenia — MRTK2
Uwaga
Pole ograniczenia jest przestarzałe i zastępowane przez kontrolkę granic następcy. Użyj jednej z opcji migracji , aby uaktualnić istniejące obiekty gry.
Skrypt BoundingBox.cs
udostępnia podstawowe funkcje przekształcania obiektów w rzeczywistości mieszanej. Pole ograniczenia spowoduje wyświetlenie modułu wokół hologramu, aby wskazać, że można z nim korzystać. Uchwyty na rogach i krawędziach modułu umożliwiają skalowanie lub obracanie obiektu. Pole ograniczenia reaguje również na dane wejściowe użytkownika. Na HoloLens 2 na przykład pole ograniczenia reaguje na bliskość palca, zapewniając wizualne informacje zwrotne ułatwiające postrzeganie odległości od obiektu. Wszystkie interakcje i wizualizacje można łatwo dostosować.
Aby uzyskać więcej informacji, zobacz Pole ograniczenia i Pasek aplikacji w Centrum deweloperów systemu Windows.
Przykładowa scena
Przykłady konfiguracji pola ograniczenia można znaleźć w scenie BoundingBoxExamples
.
Jak dodać i skonfigurować pole ograniczenia przy użyciu narzędzia Unity Inspector
- Dodawanie zderzaka box do obiektu
- Przypisywanie
BoundingBox
skryptu do obiektu - Konfigurowanie opcji, takich jak metody aktywacji (zobacz sekcję Właściwości inspektora poniżej)
- (Opcjonalnie) Przypisywanie prefab i materiałów dla pola ograniczenia 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ć pole ograniczenia w kodzie
Tworzenie wystąpienia modułu GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Przypisywanie
BoundingBox
skryptu do obiektu z zderzaczem przy użyciu polecenia AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Konfigurowanie opcji (zobacz sekcję Właściwości inspektora poniżej)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Opcjonalnie) Przypisz prefabrykaty i materiały do pola ograniczenia 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.
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
Przykład: ustawianie minimalnej, maksymalnej skali pola ograniczenia przy użyciu polecenia MinMaxScaleConstraint
Aby ustawić minimalną i maksymalną skalę, użyj wartości MinMaxScaleConstraint
. Możesz również użyć polecenia MinMaxScaleConstraint, aby ustawić minimalną i maksymalną skalę dla ManipulationHandler
wartości .
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Przykład: Dodawanie pola ograniczenia wokół obiektu gry
Aby dodać pole ograniczenia wokół obiektu, po prostu dodaj BoundingBox
do niego składnik:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Właściwości inspektora
Obiekt docelowy
Ta właściwość określa, który obiekt zostanie przekształcony przez manipulowanie polem ograniczenia. Jeśli żaden obiekt nie jest ustawiony, pole ograniczenia jest domyślnie ustawiane na obiekt właściciela.
Przesłonięcia granic
Ustawia zderzacz pola z obiektu na potrzeby obliczeń granic.
Zachowanie aktywacji
Istnieje kilka opcji aktywowania interfejsu pola ograniczenia.
- Aktywuj przy uruchamianiu: pole ograniczenia staje się widoczne po uruchomieniu sceny.
- Aktywuj w pobliżu: pole ograniczenia staje się widoczne, gdy w pobliżu obiektu znajduje się przegubowa ręka.
- Aktywuj według wskaźnika: pole ograniczenia staje się widoczne, gdy jest on przeznaczony przez wskaźnik promienia ręcznego.
- Aktywuj ręcznie: pole ograniczenia nie staje się widoczne automatycznie. Możesz ją ręcznie aktywować za pomocą skryptu, korzystając z właściwości boundingBox.Active.
Minimalna skala
Minimalna dozwolona skala. Ta właściwość jest przestarzała i zaleca się dodanie skryptu MinMaxScaleConstraint
. Jeśli ten skrypt zostanie dodany, minimalna skala zostanie pobrana z niego zamiast z pola ograniczenia.
Skalowanie maksymalne
Maksymalna dozwolona skala. Ta właściwość jest przestarzała i zaleca się dodanie skryptu MinMaxScaleConstraint
. Jeśli ten skrypt zostanie dodany, maksymalna skala zostanie pobrana z niego zamiast z pola ograniczenia.
Wyświetlanie pola
Różne opcje wizualizacji pola ograniczenia.
Jeśli oś spłaszczona jest ustawiona na Auto spłaszczanie, skrypt nie będzie zezwalał na manipulowanie wzdłuż osi z najmniejszym zakresem. Powoduje to pole ograniczenia 2D, które jest zwykle używane w przypadku obiektów cienkich.
Handles
Aby zastąpić styl uchwytu, można przypisać materiał i prefab. Jeśli nie przypisano uchwytów, będą one wyświetlane w stylu domyślnym.
Zdarzenia
Pole ograniczenia zawiera 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 zakończone: wyzwolone po zakończeniu rotacji.
- Rozpoczęto skalowanie: uruchamia się podczas uruchamiania skalowania.
- Skalowanie zakończone: uruchamia się po zakończeniu skalowania.
Style obsługi
Domyślnie po przypisaniu skryptu BoundingBox.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 pola ograniczenia stylu HoloLens 2. Ten przykład można znaleźć w scenie BoundingBoxExamples
.
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)
Bliskość (konfiguracja dla stylu HoloLens 2)
Pokaż i ukryj uchwyty z animacją na podstawie odległości do rąk. Ma animację skalowania dwuetapowego.
- Aktywny efekt zbliżeniowy: włączanie aktywacji uchwytu opartego na sąsiedztwie
- Obsługa średniej odległości: odległość dla skalowania 1 kroku
- Obsługa bliskiej odległości: odległość do skalowania drugiego kroku
- Dalekoskalowanie: domyślna wartość skalowania elementu zawartości uchwytu, gdy ręce są poza zakresem interakcji pola ograniczenia (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 pola ograniczenia (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)
Tworzenie obiektu wymiennego za pomocą procedury obsługi manipulowania
Pole ograniczenia można połączyć z elementem ManipulationHandler.cs
, aby obiekt był wymienny przy użyciu dalekiej interakcji. 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 pola ograniczenia zachowywały się tak samo podczas przenoszenia jej przy użyciu ManipulationHandler
dalekiej interakcji, zaleca się połączenie jego zdarzeń na potrzeby manipulowania rozpoczętym / manipulowaniem zakończonym odpowiednio, BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
jak pokazano na powyższym zrzucie ekranu.
Migrowanie do kontrolki granic
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.