Udostępnij za pośrednictwem


Przewodnik programisty tworzenia skryptów wizualnych w usłudze Mesh

Przejdź do artykułu Omówienie tworzenia skryptów wizualnych

Ograniczenia

  • Tylko podzbiór funkcji aparatu Unity jest udostępniany skryptom wizualnym.
  • Zmienne i właściwości z typami innymi niż proste (w tym odwołaniami do obiektów) nie są automatycznie udostępniane. Aby dowiedzieć się więcej na ten temat, zobacz Udostępnianie i sieć poniżej.

Witaj, świecie

Najprostszy skrypt wizualny, który można utworzyć, to taki, który po prostu otwiera pole komunikatu:

Zrzut ekranu przedstawiający wykres skryptu wizualnego przykładu Hello World

Wygląda to w usłudze Mesh:

Okno przeglądarki siatki z wyskakującym oknem dialogowym z wyświetlonym przyciskiem Hello World i ok

Zrzut ekranu edytora aparatu Unity z otwartą sceną Hello World za pomocą skryptów wizualnych usługi Mesh.

Testowanie skryptów

Przed przekazaniem sceny do usługi Mesh można opracowywać i testować skrypty wizualne, nawet w przypadku wielu klientów w trybie podzielonego ekranu przy użyciu trybu odtwarzania z emulacją siatki.

Diagnostyka skryptów wizualnych w edytorze

Po wybraniu obiektu GameObject z maszyną skryptu w hierarchii przekształcania usługa Mesh wyświetla panel Diagnostyka skryptów wizualnych usługi Mesh w dolnej części panelu Inspektor:

Zrzut ekranu przedstawiający panel diagnostyki skryptów wizualnych usługi Mesh

Panel diagnostyki zapewnia natychmiastową opinię na temat wszelkich ostrzeżeń lub błędów, które mogą uniemożliwić działanie skryptów w usłudze Mesh.

Bieżące ograniczenie: Przyszłe wersje panelu diagnostycznego mogą również zapewnić wgląd w użycie zmiennych udostępnionych i właściwości skryptu wizualnego oraz wyświetlanie dodatkowych diagnostyki i ostrzeżeń.

Przekazywanie do usługi Mesh

Przekaż sceny zawierające skrypty wizualne za pomocą modułu przekazującego siatkę. Aby otworzyć moduł przekazujący, w menu Mesh Toolkit wybierz pozycję Środowiska.

Uwaga: Moduł przekazujący siatkę weryfikuje skrypty wizualne przed przekazaniem i odmawia przekazania, gdy w skryptach wizualizacji występują błędy weryfikacji. Szczegółowa diagnostyka to dane wyjściowe konsoli.

Udostępnianie i sieć

Stan udostępnionego i lokalnego skryptu

Usługa Mesh używa skryptów wizualnych aparatu Unity, które jest przeznaczone do pracy bez sieci. Skrypty wizualne są uruchamiane niezależnie od każdego klienta. Jednak środowisko usługi Mesh użytkowników jest współużytkowane; wszyscy użytkownicy korzystają z jednej udostępnionej sceny, która wygląda tak samo na wszystkich klientach.

Efektem wykonywania skryptu wizualizacji jest sposób zmiany stanu sceny.

Domyślnie usługa Mesh automatycznie replikuje zmiany sceny wykonywane przez skrypty wizualne na jednym kliencie do wszystkich innych klientów. Oprócz wszystkiego, co jest udostępniane w scenie, niektóre stany pozostają niezależne od każdego klienta (innymi słowy lokalne).

Zmiany lokalne tymczasowo mają pierwszeństwo przed zmianami pochodzącymi z klientów. Przykład: w przypadku lokalnego animowania obiektu animacja lokalna nie zostanie naruszona przez zmiany pochodzące z innych klientów.

Istnieje pewne ograniczenie szybkości aktualizacji automatycznych. Klient nie wysyła dodatkowych aktualizacji, gdy jest nadal w locie; istnieje jedna aktualizacja wysyłana przez serwer w obie strony. Oznacza to około pięciu do sześciu aktualizacji na sekundę w praktycznych sytuacjach. Oznacza to, że płynna animacja sterowana przez jednego klienta nie będzie wyglądać płynnie na innych klientach. Najlepszym rozwiązaniem jest wykonywanie płynnych animacji lokalnie, najlepiej nie za pośrednictwem skryptów wizualnych, ale za pomocą normalnego systemu animacji aparatu Unity.

Spójność ostateczna stanu udostępnionego jest gwarantowana (nawet jeśli stany klientów mogą być tymczasowo różne).

Stan lokalny:

  • Naturalny stan lokalny — dźwięki, interfejs użytkownika, renderowanie.
  • Stan lokalny kontrolowany przez użytkownika — podsieci oznaczone składnikiem Zakres skryptu lokalnego.
  • Stan lokalny techniczny — obiekty, które nie są częścią hierarchii sceny (na przykład materiały renderujące, zasoby).

Stan udostępniony:

  • Ograniczone do zmiennych skryptów wizualnych oraz właściwości obiektów GameObjects i składników sceny, które są częścią hierarchii sceny.
  • Można replikować tylko zmienne i właściwości prostych typów: liczby całkowite, liczby zmiennoprzecinkowe, wartości logiczne, ciągi, Color, , Vector24//Quaternion3, Matrix4x4i .Rect

Każda zmiana stanu udostępnionego jest wysyłana za pośrednictwem sieci. Zwiększa to ruch sieciowy i, jeśli jest używany nieostrognie, może zużywać znaczną przepustowość.

Wyzwalacze udostępnionego i lokalnego skryptu

Wszystkie przepływy skryptów wizualizacji rozpoczynają się w odpowiedzi na zdarzenie.

  • Jeśli zdarzenie pochodzi z jednego klienta (na przykład użytkownik kliknie przycisk), skrypt wizualizacji jest wykonywany tylko na tym kliencie.
  • Jeśli zdarzenie występuje na wszystkich klientach, skrypt wizualizacji jest wykonywany na wszystkich klientach (na przykład zdarzenie czasomierza, zmiana właściwości udostępnionej, aktualizacja zmiennej udostępnionej, awatar wprowadza wyzwalacz, ciała fizyki dotyka zderzacza).

Podczas dodawania węzła do wykrywania, czy obiekt jest zaznaczony, ważne jest, aby wybrać właściwy. Dostępne są dwie opcje: Treść z możliwością interakcji z siatką: jest zaznaczona lokalnie, a treść z możliwością interakcji z siatką: jest zaznaczona. Załóżmy na przykład, że chcesz mieć przycisk, który można kliknąć, aby wyzwolić teleportację. Aby uczestnik kliknie przycisk i przetransportuj tylko siebie, użyj węzła Mesh Interactable Body: Is Selected Locally (Treść z możliwością interakcji z siatką: jest wybierana lokalnie ).

Zrzut ekranu przedstawiający treść z możliwością interakcji z siatką jest wybierany lokalnie.

Aby uczestnik mógł kliknąć przycisk i teleportować wszystkich użytkowników w środowisku, użyj węzła Mesh Interactable Body: Is Selected (Treść z możliwością interakcji z siatką: czy wybrano). W każdym przypadku tekst powyżej węzła informuje o zachowaniu, którego można oczekiwać:

Zrzut ekranu przedstawiający węzeł Treść interakcji z siatką jest zaznaczony, co będzie miało wpływ na wszystkich klientów.

Jeśli skrypt lokalny ustawia zmienną udostępnioną, a drugi skrypt nasłuchuje zmian w tej zmiennej (przy użyciu wyzwalacza Zmiany stanu ; zobacz poniżej), drugi skrypt zostanie wykonany na wszystkich klientach.

Usługa Mesh oferuje kilka specjalnych węzłów skryptu:

  • Wyzwalacze interwału w regularnych odstępach czasu synchronicznie na wszystkich klientach.
  • W obszarze State Changed wyzwalacze, gdy jego dane wejściowe zmieniają się (na przykład właściwości udostępnione, zmienne udostępnione, lokalne).
  • Pokaż okno dialogowe wyświetla okno dialogowe komunikatu z tekstem niestandardowym, które może opcjonalnie udostępniać przyciski jako opcje odpowiedzi.

Siatka sprawia, że pewne kompromisy na rzecz prostoty:

  • Jeśli więcej niż jeden klient próbuje zmienić te same dane, ostatni klient wygrywa (zamiast używać modelu aktualizacji danych opartych na transakcji).
  • Aby zapewnić spójność danych, skrypty wizualne uruchamiane na wszystkich klientach nie mogą odczytywać, a następnie zapisywać udostępnione właściwości lub zmienne. W takim przypadku wyzwala błąd środowiska uruchomieniowego i przerywa wykonywanie przepływu skryptu.

Najlepsze rozwiązania

Skrypty wizualne są znacznie wolniejsze niż natywny kod języka C#. Ponadto usługa Mesh rozszerza skrypty wizualne za pomocą sieci i innych funkcji integracji, a pozornie niskie obciążenie akcji skryptów wizualnych może spowodować ruch sieciowy.

Problemy z wydajnością w skryptach wizualnych są prawie zawsze spowodowane przez skrypty wykonujące aktualizacje o wysokiej częstotliwości zmiennych lub właściwości składników, które są domyślnie udostępniane.

  • Należy używać składników zakresu skryptu lokalnego w sposób liberalny, aby upewnić się, że tylko zmienne i właściwości składników, które muszą być synchronizowane między klientami, powodują obciążenie sieci. Wszystkie elementy animowane lokalnie za pomocą skryptu wizualnego nie powinny być udostępniane.

  • Aby uruchomić przepływy skryptów w odpowiedzi na zmiany zmiennych lub właściwości składników, należy użyć wyzwalacza skryptu zmiany stanu. Działa to zarówno w przypadku stanu lokalnego, jak i udostępnionego. Jest to również zalecany sposób synchronizowania lokalnych animacji.

  • Należy użyć wyzwalacza skryptu interwału zamiast wyzwalacza o wysokiej częstotliwości, takiego jak W przypadku aktualizacji, aby uruchomić przepływy skryptów w kontrolowalnych, regularnych odstępach czasu.

Należy pamiętać o następujących zagadnieniach:

  • Jeśli to możliwe, unikaj wyzwalania skryptów wizualnych każdej ramki. Zamiast używać opcji Przy aktualizacji, użyj opcji On State Changed lub On Interval.

  • Jeśli musisz wyzwolić skrypt wizualny dla każdej ramki, zrób to na jak najmniejszej liczbą obiektów.

  • Nie aktualizuj właściwości udostępnionych z wysoką częstotliwością. Zamiast tego rozważ utworzenie właściwości zaktualizowanych o wysokiej częstotliwości lokalnie przy użyciu składnika Zakres skryptu lokalnego. Pamiętaj, że zmienne skryptu wizualnego są również domyślnie udostępniane!

  • Nie używaj zmiennych obiektów, jeśli zmienne przepływu będą działać.

  • Unikaj aktualizowania udostępnionych właściwości lub zmiennych w skryptach wizualnych, które są wyzwalane jednocześnie na wszystkich klientach.

  • Unikaj ustawiania właściwości fizyki (transformacji i prędkości) na tym samym ciele fizyki na wielu klientach w tym samym czasie. Może się to zdarzyć przypadkowo w skryptach wizualnych, które reagują na wyzwalacze zmiany sceny udostępnionej.

  • Nie próbuj rozwiązywać problemów z wydajnością, konsolidując kilka przepływów skryptów, które działają na poszczególnych obiektach w jeden przepływ skryptu, który działa na wielu obiektach. Obciążenie związane z uruchamianiem przepływu skryptu jest niewielkie, a dodatkowa złożoność, którą należy dodać, aby skonsolidować skrypt, może bardzo dobrze negować wszelkie niewielkie korzyści z wydajności, które można uzyskać od zmniejszenia liczby skryptów ScriptMachines.

Porady

  • Właściwości składnika i zmienne skryptu wizualnego, które mają proste typy, są automatycznie współużytkowane przez klientów w sesji. Aby zmniejszyć obciążenie, ograniczając ilość udostępniania, dodaj składnik Zakres skryptu lokalnego do odpowiedniego obiektu GameObject, a następnie wykonaj jedną z następujących czynności:

    Aby udostępnić zmienne skryptu wizualnego, ale nie właściwości składnika lub zmienne skryptu lub właściwości składników obiektów podrzędnych:
    W składniku Zakres skryptu lokalnego wybierz pozycję Udostępnij zmienne skryptu wizualnego dla tego obiektu gry.

    Zrzut ekranu przedstawiający składnik zakresu skryptu lokalnego z wybraną właściwością o nazwie

    Aby zachować wszystkie zmienne skryptu wizualizacji i właściwości składnika dla bieżącego obiektu i jego obiektów podrzędnych lokalnie:
    Jest to osiągane przez dodanie składnika Zakres skryptu lokalnego i pozostawienie zmiennych skryptu wizualizacji udziału w tym obiekcie gry niezaznaczone.

    Zrzut ekranu przedstawiający składnik zakresu skryptu lokalnego z jego właściwością o nazwie

    Możesz zobaczyć kilka przykładów użycia składnika Zakres skryptu lokalnego w rozdziale 3 naszego samouczka mesh 101, który koncentruje się na skryptach wizualnych.

  • Aby wykonać coś w regularnych odstępach czasu synchronizacji między klientami, użyj węzła wyzwalacza Interwał .

  • Aby wykonać coś w odpowiedzi na zmiany niektórych właściwości składnika lub zmiennych skryptu wizualnego (na przykład dlatego, że ten lub inny klient ustawiał je w skrycie wizualizacji), użyj wyzwalacza On State Changed

  • Istnieją dodatkowe funkcje tworzenia skryptów wizualnych udostępniane przez usługę Mesh — zobacz sekcje Microsoft>Mesh i Microsoft>Events>Mesh w narzędziu Fuzzy Finder.

Zabezpieczenia

Usługa Mesh chroni użytkowników przed scenariuszami zagrożenia, takimi jak:

  • Naruszona zawartość sceny — na przykład złośliwe próby uzyskania dostępu do poufnych danych lokalnych.
  • Naruszony klient lub kanał transportu — na przykład złośliwe próby odczytu lub zapisu niedostępnych danych zdalnych na innych klientach.

Aby to osiągnąć, usługa Mesh uruchamia skrypty wizualne w piaskownicy (na przykład JavaScript w przeglądarce internetowej).

Podczas uruchamiania sceny usługa Mesh używa wyselekcjonowanych dozwolonych list, aby zweryfikować skrypty wizualne w celu ograniczenia dostępu do niektórych typów składników aparatu Unity i bezpiecznego podzestawu ich właściwości.

W środowisku uruchomieniowym sceny usługa Mesh ogranicza dostęp do niektórych części sceny:

  • Lokalnie: uniemożliwiając dostęp do wewnętrznych i innych poufnych danych usługi Mesh.
  • Zdalnie: sprawdzając, czy autor sceny zamierza zmodyfikować tę część sceny. Jest to wykonywane przez statyczne analizowanie skryptów wizualnych po stronie odbiorcy pod kątem ich potencjalnych zapisów sceny.

Przykłady:

  • Złośliwy lokalny skrypt wizualny chce dać wszystkie awatary bobble głowy. W tym celu próbuje przeskanować całą scenę dla obiektów GameObject, które reprezentują głowy awatarów. Siatka automatycznie filtruje wyniki skanowania w celu wykluczenia systemu awatarów.
  • Złośliwy klient zdalny chce odwrócić scenę, przerzucając wszystkie obiekty GameObject do góry nogami. Aby to osiągnąć, wysyła aktualizację właściwości, która ustawia skalę pionową każdego obiektu GameObject w scenie. Jednak ponieważ żaden skrypt wizualny na kliencie odbierający nie jest przeznaczony do wykonywania takich czynności, klient lokalny ignoruje zdalne dane wejściowe.

Integracja z usługą Mesh

Bieżące ograniczenie: w tej sekcji opisano podgląd funkcji, które nadal działają w toku.

Ogólnie rzecz biorąc, integracja z innymi składnikami jest często wykonywana przez zmianę właściwości składników i nasłuchiwanie ich. Na przykład:

  • Interakcje: obserwuj właściwości "Is Hovered" i "Is Selected".

  • Interakcje fizyki: obserwuj ciała w objętości wyzwalacza lub w kontakcie z zderzaczem.

  • Awatary: odczyt pozycji awatara, rotacji widoku i tablicy nazw. (Jeszcze nie jest dostępny).

  • Stan sesji: wyświetl listę uczestników i przeczytaj informacje o uczestnikach. (Jeszcze nie jest dostępny).

  • Obsługa skryptów w chmurze: działa razem ze skryptami w chmurze, które mogą odczytywać i zapisywać zmienne i właściwości składników. (Jeszcze nie jest dostępny).

Niektóre składniki udostępniają akcje lokalne:

  • Menedżer audio
  • Oś czasu
  • Animatorów
  • Renderowanie: odczytywanie i zapisywanie materiału i cieniowania właściwości

Fizyka jest obsługiwana specjalnie, ponieważ symulacja dla dowolnego obiektu fizyki jest zawsze autorytatywnie wykonywana tylko przez jednego klienta: jego właściciela. Aby wykonać tę pracę, ustawienie właściwości fizyki wyzwala automatyczny transfer własności do klienta, który stosuje zmianę.

Następne kroki