Początkowa konfiguracja narzędzi do blokowania środowiska World Locking Tools
Najszczuplejsza możliwa konfiguracja
W tym samouczku przedstawiono procedurę minimalnej konfiguracji umożliwiającej rozpoczęcie pracy ze wszystkimi elementami w środowisku aplikacji zablokowanymi bez konieczności wykonywania żadnych dalszych działań (na przykład kotwic przestrzennych). Znajduje się on w repozytorium Samples równorzędnym do tego repozytorium.
Przewodnik szybkiego startu
Bardziej szczegółowe i bardziej pragmatyczne podejście do integracji technologii WLT z projektem można znaleźć tutaj. W razie potrzeby odwołuje się on do tych bardziej szczegółowych stron. Chociaż jest to naprawdę kwestia osobistych preferencji, które podejście jest bardziej odpowiednie, szybkie przeczytanie strony Przed rozpoczęciem może być oszczędność czasu, gdzie poświęcić energię w tej dokumentacji.
Obsługiwane środowiska
Narzędzia World Locking Tools for Unity są obecnie przeznaczone dla aplikacji platformy UNIWERSALNEJ systemu Windows dla rodziny urządzeń HoloLens. Obsługiwane są zarówno oryginalne urządzenia HoloLens (x86) i HoloLens 2 (ARM64).
Obsługa eksperymentalna dla innych platform jest dostępna za pośrednictwem podsystemów AR aparatu Unity.
Kompilacja narzędzia world locking Tools continuous integration (CI) jest weryfikowana za pomocą aparatu Unity2018.4.6f1 z programem Visual Studio 2017. Jednak rozbudowane programowanie WLT zostało również wykonane przy użyciu gamy wersji aparatu Unity2018 i szeregu aparatu Unity2019. Zarówno program Visual Studio 2017, jak i program Visual Studio 2019 zostały użyte podczas opracowywania narzędzi.
Jeśli wystąpią jakiekolwiek problemy ze zgodnością z innymi wersjami aparatu Unity i/lub programu Visual Studio, chcielibyśmy o tym usłyszeć! Najlepszym sposobem zgłaszania wszelkich problemów jest portal problemów w witrynie GitHub.
Zakładane tło
Zakłada się, że osoby, które chcą zintegrować rozwiązanie World Locking Tools z ich projektami, znają już podstawy tworzenia i wdrażania aplikacji dla rodziny urządzeń HoloLens. Jeśli nie, na końcu tego artykułu znajdziesz kilka świetnych odwołań .
Warstwy Narzędzia blokujące świat
Narzędzia do blokowania świata są podzielone na cztery warstwy. Gdy strzałki wskazują na warstwę zależną, prosty wykres zależności wygląda następująco:
Linie przerywane wskazują opcjonalne zależności.
Podczas gdy warstwa Przykłady używa zestawu MixedRealityToolkit (MRTK), żadna z innych warstw nie ma żadnych zależności zewnętrznych, a pełna funkcjonalność jest dostępna zgodnie z zestawem narzędzi MRTK, ale niezależna od zestawu narzędzi MRTK.
Poniżej przedstawiono dalsze uwagi dotyczące zależności aplikacji.
Warstwy można podsumować w następujący sposób:
Wtyczka
Interfejs imperatywne umożliwiający bezpośrednią komunikację z biblioteką DLL aparatu. Typowe problemy, takie jak przeprowadzanie marshalingu argumentów, są tutaj realizowane, a niektóre komponowanie wielu funkcji często używanych w połączeniu z dyrektywami złożonymi. Pozostaje to interfejs języka C# niskiego poziomu dla bazowej biblioteki DLL języka C++. Jego bezpośrednie użycie jest dostępne, ale nie jest potrzebne ani wskazane.
Podstawowe funkcje
Core to hermetyzacja wszystkich kroków niezbędnych do uzyskania korzyści ze stabilnej światowej przestrzeni narzędzi blokady świata, spakowanej w interfejs deklaratywny. Oczekuje się, że działająca aplikacja będzie dostarczana przy użyciu tylko funkcji z rdzenia.
Narzędzia
Narzędzia są w dużej mierze diagnostyczne w naturze. Wizualizacje procesów narzędzia do blokowania świata są dostępne w formularzach, które można łatwo dodać do dowolnego projektu, który korzysta z narzędzi world locking Tools.
Uwzględniono inne wygodne narzędzia , ale oczekuje się, że będą pomocne w rozpoczęciu kodowania niestandardowych rozwiązań, zamiast być ostatecznymi rozwiązaniami, jak oferuje Core.
Przykłady
Warstwa Przykłady próbuje przedstawić przykłady konfigurowania typowych scenariuszy podczas korzystania z narzędzi do blokowania świata oraz najlepsze rozwiązania dotyczące integracji narzędzi world locking Tools w różnych scenariuszach.
Wszelkie niezbędne zależności zestawu narzędzi MRTK dla środowiska użytkownika i manipulowania obiektami są ograniczone do skryptów i prefab w warstwie Przykłady. Pozostawia to niższe warstwy wolne od wszelkich zależności zewnętrznych.
Skrypty i zasoby w warstwie Przykłady nie powinny być zintegrowane bezpośrednio z produktami wysyłkowymi, chociaż nie ma zakazu. Zamiast tego ich konstrukcja sprzyja prostoty i jasności w zakresie możliwości ponownego wykorzystania i wydajności.
Aplikacja
Ogólnie rzecz biorąc, aplikacja musi mieć tylko zależność od narzędzi world locking Tools Core.
Podczas programowania wiele wizualizacji i innych pomocników do zrozumienia nieoczekiwanego zachowania jest dostępnych w warstwie Narzędzia. Te pomocniki najlepiej usunąć z gotowej aplikacji lub przynajmniej wyłączone. Oczywiście są one bezpłatne dla innych zastosowań, jak również, w ich bieżącej formie lub zmodyfikowane. Aby uzyskać szczegółowe informacje, zobacz licencję.
Aby korzystać z zaawansowanych funkcji i eksperymentować z pełnymi możliwościami narzędzi World Locking Tools, warstwa wtyczki oferuje dostęp imperatywnego niskiego poziomu do biblioteki DLL aparatu.
Jeśli dostęp do warstwy wtyczki staje się konieczny, może to wskazywać na niedobór powierzchni interfejsu API oferowanej w warstwie Podstawowa. Zespół World Locking Tools zawsze chce wypełnić takie luki. Rozważ współtworzenia takich szczegółowych informacji do zespołu. Zobacz współtworzenia.
Uwaga ostrzegawcza dotycząca długości ścieżki instalacji
Niektóre wersje zestawu narzędzi MRTK mają problem z długimi ścieżkami instalacji. Pełna długość ścieżki głębokich podfolderów w instalacji zestawu narzędzi MRTK może przekroczyć limit ścieżki systemu Windows (260 znaków). Jeśli zostanie wyświetlony błąd kompilacji następującego formularza:
DirectoryNotFoundException: Could not find a part of the path "D:\MyOverTwentyEightCharacterLongLengthInstallPath\MixedReality-WorldLockingTools-Unity\Assets\MRTK\MixedRealityToolkit.Providers\WindowsMixedReality\DotNetAdapter\Plugins\net46\Microsoft.Windows.MixedReality.DotNetWinRT\Editor\Microsoft.Windows.MixedReality.DotNetWinRT.Editor.asmdef"
ale plik jest rzeczywiście na dysku, problem prawdopodobnie długość ścieżki. Zespół MRTK zdaje sobie z tego sprawę i pracuje nad jego ulepszeniem (uwaga: wierzę, że poczynili tu wielkie ulepszenia i nie jest to już problem). W międzyczasie obejście polega na skróceniu prefiksu ścieżki przez kombinację następujących elementów:
- Zainstaluj projekt aparatu Unity w katalogu głównym ścieżki o krótszej długości, na przykład "D:\Proj"
- Jeśli sklonowanie repozytorium, sklonuj katalog główny narzędzi World Locking Tools w coś krótszego niż domyślny "\MixedReality-WorldLockingTools-Unity", na przykład:
git clone https://github.com/microsoft/MixedReality-WorldLockingTools-Unity.git d:\MyGit\wlt
Ten limit ścieżki nie jest zwykle problemem z narzędziami do blokowania świata, ponieważ nie korzystają z struktury folderów, która jest tak głęboka.
Dodawanie narzędzi do blokowania świata do projektu aparatu Unity
Uwaga
Poniżej opisano ręczną instalację narzędzi world locking Tools i zależności. Znacznie bardziej usprawniony proces instalacji jest dostępny za pośrednictwem narzędzia funkcji rzeczywistości mieszanej. Instalacja za pomocą narzędzia funkcji została opisana tutaj. Jeśli narzędzie funkcji instaluje środowisko WLT, możesz pominąć następujące czynności i przejść do dodawania funkcji WLT do sceny
Narzędzia World Locking Tools polegają na zainstalowaniu bazowego frozen world engine.
W przypadku dodawania narzędzi world locking Tools do istniejącego projektu zaleca się rozpoczęcie od projektu zweryfikowanego w celu skompilowania i wdrożenia na urządzeniu HoloLens. Pomoże to oddzielić problemy z uruchamianiem aplikacji na urządzeniu HoloLens, co może być skomplikowane, od problemów z narzędziami do blokowania świata. Następnie przejdź do sekcji Assets (Zasoby narzędzi locking tools) w sekcji FrozenWorld Engine (Narzędzia Blokowania świata) poniżej.
Instalacja aparatu FrozenWorld
Biblioteka DLL Frozen World Engine może zostać uzyskana z narzędzia NuGet przy użyciu doskonałego narzędzia NuGet for Unity lub ręcznie.
Używanie narzędzia NuGet dla aparatu Unity
Upewnij się, że źródło danych nuget.org znajduje się w źródłach. Sprawdź to w module Unity > Edit Preferences > NuGet for Unity (Edytuj > preferencje NuGet dla aparatu Unity). Jeśli nie, albo:
Aby dodać ten sam udział, użyj graficznego interfejsu użytkownika Dodaj nowe źródło w menu Preferencje edycji >> aparatu Unity > NuGet dla aparatu Unity.
- Zastąp ciąg "Nowe źródło" wybraną nazwą (na przykład "NuGet").
- Zastąp ciąg "source_path" ciągiem "http://www.nuget.org/api/v2/".
Po potwierdzeniu kanału informacyjnego nuget.org w narzędziu Unity > NuGet Zarządzaj pakietami NuGet > znajdź i zainstaluj najnowszą wersję microsoft.MixedReality.FrozenWorld.Engine. (Wyszukaj ciąg "FrozenWorld".)
Aby zaktualizować pakiet NuGet do nowszej wersji, otwórz ponownie pakiet NuGet NuGet > Unity > i znajdź pakiet FrozenWorld.Engine i wybierz pozycję Aktualizuj. Uwaga: może być konieczne znalezienie wersji, której szukasz, na karcie Aktualizacje.
Ręczna instalacja biblioteki DLL zamrożonego aparatu świata
Użyj edytora tekstów, aby dodać packageSources
wiersz do pliku Assets/NuGet.config, na przykład:
<packageSources>
<add key="NuGet" value="http://www.nuget.org/api/v2/" />
</packageSources>
Jeśli nie masz jeszcze pliku Assets/NuGet.config, możesz skopiować go z repozytorium github World Locking Tools.
Za pomocą edytora tekstów dodaj pakiet DLL Frozen World Engine do pliku Assets/packages.config, na przykład:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.MixedReality.Unity.FrozenWorld.Engine" version="1.0.0" />
</packages>
Ponownie, jeśli nie masz jeszcze pliku Assets/packages.config, możesz pobrać plik z repozytorium github World Locking Tools lub po prostu skopiować powyższe pliki do pliku tekstowego o nazwie "Assets/packages.config".
Po skonfigurowaniu pliku NuGet.config i packages.config zainstaluj za pomocą:
- Uzyskaj najnowsze nuget.exe z pobierania pakietów NuGet.
- Upewnij się, że nuget.exe znajduje się w Twojej ścieżce (tutaj założę, że został skopiowany do zasobów).
- Otwórz okno polecenia programu PowerShell i zmień katalog na folder Assets.
- Uruchom następujące polecenie:
.\nuget.exe restore
Aby przeprowadzić uaktualnienie do nowszej wersji:
- Zaktualizuj numer wersji FrozenWorld.Engine w powyższym pliku packages.config do żądanej wersji (na przykład version="1.0.0" staje się wersją="1.0.1").
- Usuń wszystkie elementy w folderze Assets/Packages, zaczynając od "Microsoft.MixedReality.Unity.FrozenWorld.Engine".
- Uruchom ponownie nuget.exe tak jak powyżej.
Zasoby narzędzi do blokowania na świecie
Zaimportuj wymagane pliki narzędzi World Locking Tools .unitypackage
do projektu (preferowana metoda) lub skopiuj je. Mogą one zostać przeniesione do podfolderu w obszarze Assets, aby umożliwić im tworzenie aplikacji.
Najnowsze stabilne .unitypackage
pliki można znaleźć w temacie World Locking Tools for Unity Releases (Narzędzia do blokowania środowiska Unity).
Warstwa WorldLocking.Core i Engine na pewno będzie wymagana, więc minimalny pakiet instalacyjny będzie WorldLockingCoreEngine.unitypackage.
Aby określić, jakie inne warstwy mogą być wymagane, zobacz omówienie warstw narzędzi do blokowania świata i ich zależności powyżej. Każda warstwa jest zawarta w jednym pakiecie aparatu Unity.
Ponieważ niektóre przykłady narzędzi do blokowania świata używają funkcji z zestawu narzędzi MRTK, zgodna migawka zestawu narzędzi MRTK jest dołączona do przykładów unitypackage
. Aby zapoznać się z najnowszą wersją zestawu narzędzi MRTK, zobacz tutaj.
Dodawanie narzędzi do blokowania środowiska World Do sceny aparatu Unity
Uwaga
Poniższe kroki są zautomatyzowane w narzędziu do konfigurowania sceny WLT, które można znaleźć w menu Mixed Reality Toolkit > Utilities > World Locking Tools.
W projekcie aparatu Unity zawierającym aparat FrozenWorld (z nuget.org) zaimportuj dowolne żądane warstwy zasobów narzędzi do blokowania świata (ale co najmniej WorldLocking.Core) i opcjonalnie zestaw narzędzi MRTK. Następnie utwórz nową scenę (lub otwórz istniejącą scenę).
Uwaga
Dodaj dodatkowy węzeł w katalogu głównym hierarchii aparatów. Ten węzeł będzie używany do dostosowywania śledzonej kamery głowy do przestrzeni zablokowanej na świecie. (W przypadku korzystania z zestawu NARZĘDZI MRTK ten nowy obiekt GameObject będzie elementem nadrzędnym obiektu MixedRealityPlayspace).
Podstawowe środowisko
Przeciągnij prefab WorldLockingManager z lokalizacji Assets/WorldLocking.Core/Prefabs do sceny. Jego miejsce w scenie nie ma znaczenia, ale nie powinno być w drzewie kamery. Zobacz przykładową scenę sugerowanej konfiguracji.
W prefabie WorldLockingManager są dostępne ustawienia, ale pozostawienie ich wartości domyślnych jest zalecane, aby rozpocząć pracę.
Aby uzyskać wyjaśnienia przedstawionych opcji, zobacz World Locking Tools Context (Kontekst narzędzi do blokowania na świecie).
[Opcjonalnie] Zestaw narzędzi MRTK
Narzędzia do blokowania świata uzupełniają się, ale ortogonal do MRTK. Korzystanie z zestawu narzędzi MRTK wraz z narzędziami do blokowania świata jest całkowicie opcjonalne.
Oznacza to, że przykłady narzędzi world locking tools są tworzone przy użyciu zestawu NARZĘDZI MRTK, a mrTK jest ogólnie niezwykle cenna w opracowywaniu typów aplikacji MR, które korzystają najbardziej z narzędzi do blokowania świata.
W przypadku korzystania z zestawu narzędzi MRTK zamiast używania migawki dołączonej do przykładów zaleca się dodanie najnowszych wersji co najmniej następujących pakietów:
- MixedReality.Toolkit
- MixedReality.Toolkit.Providers
- MixedReality.Toolkit.Services
- MixedReality.Toolkit.SDK
[Opcjonalnie] Wizualizowanie gąbka i świat zablokowanych kotwic
Wymaga to dodania narzędzia WorldLocking.Tools do zasobów projektu.
Jeśli chcesz wizualizować kotwice, przeciągnij prefab AnchorGraphVisual z obszaru Assets/WorldLocking.Tools/Prefabs do sceny. Pola wyboru, aby przełączyć aspekty wizualizacji w inspektorze znajdują się w WorldLockingManager.
W miarę diagnostyki wizualizacje WorldLocking.Tools nie są mocno zoptymalizowane i znacznie zmniejszy wydajność, zanim czas przetwarzania podstawowych narzędzi do blokowania świata stanie się odpowiedni.
[Opcjonalnie] Prosty pulpit nawigacyjny do sterowania parametrami w rzeczywistości mieszanej
Dostępny jest prosty huD, który może służyć do kontrolowania WorldLockingManager w czasie wykonywania z wewnątrz mr. Są one dostarczane w pakiecie Przykłady. Chociaż mogą być używane tak, jak to jest, są one przeznaczone jako wzorce podczas tworzenia podobnych funkcji w aplikacjach własnych systemów wyświetlania i środowiska użytkownika.
Przeciągnij w prefabcie WorldLocking.Examples/Prefabs/Dashboard i wskaż pole Anchor Visualizer do wizualizatora w poprzedniej sekcji.
Migrowanie istniejącej sceny do narzędzi do blokowania świata
Największą zmianą podczas przechodzenia do narzędzi world locking tools jest to, że nie ma już potrzeby używania kotwic przestrzennych do obiektów wirtualnych blokady świata.
Kotwice przestrzenne tradycyjnie były jedynym narzędziem dostępnym do blokowania pojedynczych obiektów. Jednak w przypadku korzystania z narzędzi world locking tools współrzędnych, w których istnieją te obiekty wirtualne, jest już zablokowana na świecie. Nie jest potrzebne dalsze blokowanie.
Nie tylko są niepotrzebne kotwice przestrzenne, nie będą działać poprawnie, ponieważ nie uwzględniają dodatkowych przekształceń hierarchii kamer (takich jak transformacja MRTK "Playspace").
W związku z tym wszystkie kotwice przestrzenne i wszystkie kotwice przestrzenne powinny zostać usunięte ze sceny, a wszystkie skrypty dodające kotwice przestrzenne powinny przestać to robić. Kotwice przestrzenne nie muszą być zastępowane przez nic; World Locking Tools zakotwiczy swoje cele w świecie rzeczywistym.
Jeśli pożądane jest porównanie światowej blokady z narzędziami World Locking Tools i bez nich, zamiast usuwać narzędzia WorldAnchors, mogą zostać zastąpione elementem ToggleWorldAnchor dostarczonym w narzędziu WorldLocking.Tools.
ToggleWorldAnchor działa dokładnie tak samo jak WorldAnchor, z ważną różnicą, że gdy menedżer narzędzi blokady świata jest aktywny, wygodnie wyłącza się i wychodzi z drogi. Gdy menedżer narzędzi blokowania świata jest wyłączony, zachowuje się jako normalny WorldAnchor.
Jeśli z jakiegoś innego powodu worldanchors są nadal wymagane w scenie (na przykład w przypadku udostępniania sieci), mogą być używane z adapterem dostarczonym jako WorldAnchorAdapter.
WorldAnchorAdapter przekształca nieprzetworzone położenie obiektu GameObject umieszczonego przez WorldAnchor w świecie zablokowanej przestrzeni globalnej Aparatu Unity, a następnie stosuje przekształcenie do obiektu docelowego. Aby go użyć, zamiast dodawać obiekt WorldAnchor bezpośrednio, obiekt WorldAnchor powinien zostać zastosowany do obiektu proxy (zwykle pustego obiektu GameObject), a następnie w kolumnie Update() worldAnchorAdapter odczytuje pozę WorldAnchor, przekształca ją poprawnie i stosuje ją do obiektu docelowego.
Ukończono instalację
Po wykonanie powyższych kroków projekt wdrożony na urządzeniu zostanie dostosowany przez narzędzia world locking Tools w celu utrzymania optymalnie stabilnego miejsca zablokowanego na świecie. Wszystkie stałe obiekty umieszczone w scenie pozostaną wizualnie spójne zarówno względem siebie, jak i ze światem fizycznym.
Dostępne przykładowe aplikacje
Przykładowe sceny, w tym skrypty i zasoby, są udostępniane w celu zademonstrowania bardziej złożonego korzystania z możliwości narzędzia world locking Tools.
Na przykład WorldLockedPhysicsSample zapewnia proste środowisko, w którym fizycznie symulowane obiekty można tworzyć i usuwać, współdziałając ze sobą i ze środowiskiem (mapowaniem przestrzennym).
Aby bardziej skupić się na funkcji przypinania obszaru, SpacePin zapewnia znacznie uproszczony przykład wyrównania obiektu wirtualnego na dużą skalę do rzeczywistych funkcji.
RayPins rozszerza możliwości wprowadzone przez przykład SpacePin, umożliwiając przypinanie świata wirtualnego do świata fizycznego z testami promieniowymi względem siatki przestrzennej.
Dokumentacja dotycząca rozpoczynania pracy
Jeśli nie masz pewności co do podstaw tworzenia, kompilowania i wdrażania aplikacji AR w rodzinie urządzeń HoloLens, zapoznaj się z przykładami, które mogą pomóc w rozpoczęciu pracy.
Omówienie programowania w środowisku Unity — unity na potrzeby opracowywania rozwiązań MR/AR.
Mr Basics 100 — Przewodnik po rozpoczęciu opracowywania dla urządzenia HoloLens
Samouczki dotyczące urządzenia HoloLens 2 — zapoznaj się z wprowadzeniem do tworzenia aplikacji dla urządzenia HoloLens 2.
Koordynujące systemy koordynują implikacje przestrzeni w rozwoju ar.
- Pamiętaj, że narzędzia do blokowania świata rozwiązują opisane tutaj problemy.
Masz problem?
Zobacz Przewodnik rozwiązywania problemów.