Ćwiczenie — manipulowanie obiektami 3D przy użyciu kontrolki granic
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.
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)
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óć.
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.
W okienku Projekt przejdź do folderu Packages>MRTK Standard Assets>Audio>HoloLens2 folder, aby zlokalizować klipy dźwiękowe:
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
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
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
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
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.
Dodawanie kontrolki granic
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:
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.
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"
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
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: