Ćwiczenie — manipulowanie obiektami 3D przy użyciu kontrolki granic

Ukończone

Skrypt ObjectManipulator sprawia, że obiekt jest wymienny, skalowalny i obracany przy użyciu jednej lub dwóch rąk. Ten skrypt obsługuje model wejściowy bezpośredniej manipulacji, ponieważ umożliwia użytkownikowi dotknięcie hologramów bezpośrednio za pomocą rąk. W tym miejscu użyj "ObjectManipulator", aby umożliwić interakcje ręczne do przenoszenia, skalowania i obracania łazika.

  1. Ponadto skonfigurujesz Eksploratora łazika, aby umożliwić umieszczenie części łazika w łazik, aby uczynić go kompletnym zestawem łazika. W okienku Hierarchia rozwiń obiekt RoverExplorer >RoverParts i zaznacz wszystkie obiekty części łazika podrzędnego oraz obiekt RoverAssembly, a następnie w okienku Inspektor użyj przycisku Dodaj składnik, aby dodać następujące składniki do wszystkich wybranych obiektów:

    • Manipulator obiektów (skrypt) składnik
    • składnik Sterownik Montażu Części (Skrypt)

    Zrzut ekranu RoverAssembly ze wszystkimi wybranymi obiektami części łazika oraz dodanymi składnikami.

  2. Po zaznaczeniu wszystkich obiektów części łazika oraz obiektu RoverAssembly, w panelu Inspektora skonfiguruj składnik Object Manipulator (Script) w następujący sposób:

    • W obszarze Podstawowe ustawienia umożliwiające interakcjęznajdź zdarzenie po kliknięciu (). Wybierz ikonę +, aby dodać nowe zdarzenie. Skonfiguruj zdarzenie w następujący sposób:

      a. Przypisz obiekt RoverAssembly jako odbiornik zdarzenia On Clicked (), przeciągając go z Hierarchii do pola None (Object).

      b. Z listy rozwijanej Brak funkcji wybierz TapToPlace>StartPlacement(), aby wywołać tę metodę po wyzwoleniu zdarzenia.

    • Z listy rozwijanej dozwolony typ manipulacji wyczyść pole wyboru Skaluj, tak aby włączone były tylko Przenieś i Obróć.

    Zrzut ekranu Unity z skonfigurowanym typem manipulacji dwoma rękami.

  3. Wybierz tylko obiekt RoverAssembly i usuń na nim składnik Stateful Interactable, jeśli istnieje. Wybierz trzy kropki po prawej stronie składnika, a następnie wybierz pozycję Usuń składnik.

  4. W okienku Projekt przejdź do folderu Packages>MRTK Standard Assets>Audio>HoloLens2 folder, aby zlokalizować klipy dźwiękowe:

    zrzut ekranu przedstawiający okno projektu Unity z wybranym folderem Audio.

  5. W okienku Hierarchia wybierz ponownie wszystkie obiekty części łazika , a następnie w okienku Inspektor wybierz Dodaj komponent, aby dodać komponent Źródła audio i skonfigurować go w następujący sposób:

    • Przypisz klip audio MRTK_Scale_Start do pola AudioClip
    • Usuń zaznaczenie pola wyboru Play On Awake
    • Zmień Spatial Blend na 1

    Zrzut ekranu z Unity ze wszystkimi wybranymi częściami łazika oraz dodanym i skonfigurowanym komponentem Audio Source.

  6. W okienku Hierarchia rozwiń obiekt RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints, aby wyświetlić wszystkie obiekty wskazówek umieszczania, a następnie wybierz pierwszą część łazika, RoverParts >Camera_Part, i skonfiguruj składnik Part Assembly Controller (Script) w następujący sposób:

    • Przypisz obiekt Camera_PlacementHint do pola Lokalizacja do Umieszczenia

    Zrzut ekranu Unity z komponentem PartAssemblyController Camera_Part skonfigurowanym.

  7. Powtórz krok 5 dla każdej z pozostałych części łazika oraz obiektu RoverAssembly, aby skonfigurować składnik Part Assembly Controller (Script) w następujący sposób:

    • W przypadku Generator_Partprzypisz obiekt Generator_PlacementHint do pola Location To Place
    • W przypadku Lights_Partprzypisz obiekt Lights_PlacementHint do pola lokalizacji do miejsca.
    • W przypadku UHFAntenna_Partprzypisz obiekt UHFAntenna_PlacementHint do pola Location To Place
    • W przypadku Spectrometer_Partprzypisz obiekt Spectrometer_PlacementHint do pola Miejsce do umieszczenia.
    • W przypadku RoverAssemblyprzypisz sam obiekt, czyli ten sam obiekt RoverAssembly, do pola Location To Place
  8. W okienku Hierarchia wybierz obiekt przycisku RoverExplorer > Buttons >Reset, a następnie w okienku Inspektor skonfiguruj zdarzenie PressableButton OnClicked () w następujący sposób:

    • Przypisz obiekt RoverAssembly do pola None (Object)
    • Z listy rozwijanej Brak funkcji wybierz pozycję PartAssemblyController>ResetPlacement (), aby ustawić tę funkcję jako akcję do uruchomienia po wyzwoleniu zdarzenia

    Zrzut ekranu Unity z obiektem przycisku Reset i zdarzeniem OnClick skonfigurowanym.

  9. Jeśli teraz wprowadzisz tryb gry, możesz użyć interakcji z bliska lub z daleka, aby umieścić części łazika na łazik. Gdy część znajduje się blisko odpowiedniej wskazówki umieszczania, zostanie ona wciągniętą w miejsce i stanie się częścią łazika. Aby zresetować pozycje, naciśnij przycisk Resetuj.

    Zrzut ekranu przedstawiający widok podzielony trybu odtwarzania w silniku Unity z naciśniętym przyciskiem Resetuj.

Dodawanie kontrolki granic

  1. W oknie Hierarchia wybierz obiekt RoverExplorer, a następnie w oknie Inspector (Inspektor) użyj przycisku Dodaj składnik, aby dodać składnik BoundsControl. usuń zaznaczenie pola wyboru obok składnika, aby wyłączyć go domyślnie:

    Zrzut ekranu programu Unity z wybranym obiektem RoverExplorer oraz z dodanymi i wyłączonymi komponentami.

  2. W oknie Projekt przejdź do folderu Packages>MRTK Spatial Manipulation>BoundsControl>Folder prefabs, kliknij i przeciągnij prefab BoundingBoxWithHandles do pola Bounds Visuals Prefab składnika Bounds Control.

    zrzut ekranu Unity z wybranym obiektem RoverExplorer i z skonfigurowanym polem Bounds Visuals Prefab.

  3. W okienku Hierarchia rozwiń obiekt Menu >Buttons-GridLayout (Przyciski), aby wyświetlić trzy przyciski, zmień nazwę trzeciego przycisku na BoundsControl_Enable, a następnie w oknie Hierarchy (Hierarchia) skonfiguruj obiekt gry BoundsControl_Enable w następujący sposób:

    • Wybierz obiekt Frontplate > AnimatedContent > Icon > Label i zmień składnik TextMeshPro na Włącz. Upewnij się, że obiekt Label jest aktywowany w hierarchii
    • Skonfiguruj zdarzenie PressableButton.OnClicked(), przypisując obiekt RoverExplorer do pola None (Object) i wybierając BoundsControl>bool Enabled z listy rozwijanej No Function (sprawdź, czy argument jest zaznaczony)
    • Wybierz małą ikonę +, aby dodać kolejne zdarzenie
    • Przypisz obiekt RoverExplorer do pola None (Object)
    • Z listy rozwijanej No Function wybierz ObjectManipulator>bool Włączony, aby zaktualizować tę wartość właściwości po wyzwoleniu zdarzenia, i upewnij się, że pole wyboru argumentu jest zaznaczone
    • Wybierz małą ikonę +, aby dodać kolejne zdarzenie
    • Przypisz obiekt RoverExplorer do pola None (Object)
    • Z listy rozwijanej No Function wybierz BoundsControl>bool HandlesActive, aby zaktualizować tę wartość właściwości po wyzwoleniu zdarzenia i sprawdź, czy pole wyboru argumentu jest zaznaczone
    • Wybierz obiekt Frontplate > AnimatedContent > Icon > UIButtonFontIcon i zmień ikonę na ikonę czterech strzałek w składniku Font Icon Selector. Możesz to znaleźć na liście ikon lub ustawić ** Bieżąca nazwa ikony** na "Ikona 40"

    Zrzut ekranu Unity z wybranym obiektem BoundsControl_Enable przycisku i skonfigurowanym składnikiem Button Config Helper.

  4. Zduplikuj przycisk BoundsControl_Enable i zmień jego nazwę na BoundsControl_Disable, a następnie w okienku Inspector skonfiguruj składnik Button Config Helper (Script) w następujący sposób:

    • Wybierz obiekt Frontplate > AnimatedContent > Icon > Label i zmień składnik TextMeshPro na Wyłączone
    • Skonfiguruj zdarzenie PressableButton.OnClicked(), upewniając się, że wszystkie pola wyboru w obszarze zdarzeń są niezaznaczone

    Zrzut ekranu programu Unity z wybranym obiektem przycisku BoundsControl_Disable i skonfigurowanym składnikiem Konfiguratora przycisku.

  5. Jeśli teraz wprowadzisz tryb gry i wybierzesz Włącz, aby włączyć kontrolę granic, możesz użyć bliskiej lub dalekiej interakcji, aby przenieść, obrócić i skalować kontrolkę Granice, a następnie wybrać Wyłącz, aby ponownie wyłączyć kontrolkę Granice:

    Zrzut ekranu przedstawiający widok podzielony trybu gry Unity z manipulowaniem kontrolką 'Bounds Control'.