Pole ograniczenia — MRTK2

Obwiedni

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 .

Przykłady pola ograniczenia

Jak dodać i skonfigurować pole ograniczenia przy użyciu narzędzia Unity Inspector

  1. Dodawanie zderzaka box do obiektu
  2. Przypisywanie BoundingBox skryptu do obiektu
  3. Konfigurowanie opcji, takich jak metody aktywacji (zobacz sekcję Właściwości inspektora poniżej)
  4. (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.

Pole ograniczenia 1

Jak dodać i skonfigurować pole ograniczenia w kodzie

  1. Tworzenie wystąpienia modułu GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Przypisywanie BoundingBox skryptu do obiektu z zderzaczem przy użyciu polecenia AddComponent<>()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 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;
    
  4. (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 ManipulationHandlerwartoś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.
Zdarzenia

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.

Style uchwytu pola ograniczenia

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 .

Style ręczne 2

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.

Bliskość
  • 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.

Program obsługi manipulowania

Aby krawędzie pola ograniczenia zachowywały się tak samo podczas przenoszenia jej przy użyciu ManipulationHandlerdalekiej 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.

Migrowanie kontrolek granic