Umístění klepnutím – MRTK2

Klepněte na Místo

Klepnutím na místo je součást vzdálené interakce, která slouží k umístění herního objektu na povrch. Tato komponenta je užitečná pro umístění objektů do prostorové sítě. Klepnutím na místo umístíte objekt pomocí kombinace dvou kliknutí a pohybu hlavou. Kliknutím zahájíte umístění, pohybem hlavy řídíte polohu objektu a kliknutím umístíte objekt do scény.

Použití funkce Klepnout na místo

  1. Nastavení scény

    • Vytvoření nové scény unity
    • Přidání sady MRTK do scény tak, že přejdete na sadu nástrojů> Mixed RealityPřidat do scény a Konfigurovat.

    Poznámka

    Klepnutím na místo používá kliknutí řízená vstupním systémem MRTK, ale dá se ovládat i bez kliknutí. Viz část Možnosti konfigurace kódu klepnutím na místo níže.

    • Přidejte do scény datovou krychli a změňte měřítko na 0,2 a změňte pozici na (0, 0, 0,7).
  2. Připojení funkce Klepnutí na místo k hernímu objektu pomocí skoliéru

    TapToPlaceInspector

    • Po přidání komponenty Klepnutím na místo bude připojena také obslužná rutina Řešitele. Klepnutím na místo se odvozuje od třídy Řešitel , která vyžaduje obslužnou rutinu Řešitele. Pozice objektu Klepnutím na místo se vypočítá vzhledem k TrackedTargetType obslužné rutině Řešitele. Ve výchozím nastavení je hlavička TrackedTargetType, tj. když se hlava přesune, objekt následuje, pokud je vybrán. Lze TrackedTargetType také nastavit na Controller Ray, který má objekt za kontrolerem. První skupinou vlastností v inspektoru Klepnout na místo jsou Společné vlastnosti řešitele.

    Důležité

    Klepnutím na místo je samostatný Řešitel a nelze ho zřetězovat s jinými řešiteli. Nelze zřetězení, protože SolverHandler.UpdateSolvers slouží k aktualizaci umístění objektu během jeho umístění.

    • Klepnutím umístěte vlastnosti:
      • Auto Start: Pokud ano, řešitel klepnutím na místo začne řídit pozici herního objektu, který má být umístěn. Objekt se okamžitě spustí po TrackedTargetType (Head nebo Controller Ray). Tato hodnota musí být upravena před vyvolání start(), aby měla nějaký účinek.
      • Default Placement Distance: Výchozí vzdálenost (v metrech) objektu bude umístěn vzhledem k TrackedTargetType vpřed v ŘešitelHandler. Herní objekt bude umístěn ve výchozí vzdálenosti umístění, pokud paprsek nezasáhne povrch.
      • Max Raycast Distance: Maximální vzdálenost (v metrech) pro raycast na základě původu TrackedTargetType. Tento raycast hledá plochu pro umístění vybraného objektu.
      • UseDefaultSurfaceNormalOffset: Tato vlastnost je ve výchozím nastavení true a zajišťuje zarovnání objektu na povrchu. Pokud je tato vlastnost true, použije se výchozí normální posun plochy místo jakékoli hodnoty zadané pro SurfaceNormalOffset vlastnost. Pokud je false, použije se hodnota pro SurfaceNormalOffset . Výchozí normální posun povrchu je rozsahy uřazení podél osy z.
      • Surface Normal Offset: Vzdálenost mezi středem herního objektu, který se má umístit, a povrchem podél povrchu normální, pokud paprsek dosáhne povrchu. Tato vlastnost se použije pouze u objektu, pokud UseDefaultSurfaceNormalOffset je false.
      • Keep Orientation Vertical: Pokud je to pravda, herní objekt, který se má umístit, zůstane vzpřímený a v souladu s Vector3.up.
      • Rotate According to Surface: Pokud je hodnota false, herní objekt, který se má umístit, nezmění své otočení podle povrchového zásahu. Objekt zůstane orientovaný směrem ke kameře, dokud je hodnota IsBeingPlaced pravdivá.
      • Magnetic Surfaces: Pole Vrstvové masky, které se mají spouštět od nejvyšší po nejnižší prioritu. První maska vrstvy, která poskytne přístup raycastu, se použije pro výpočty pozice.
      • Debug Enabled: Pokud je hodnota true a v Editoru Unity, bude normální hodnota raycastu nakreslena žlutě. Ladění povoleno je užitečné, pokud RotateAccordingToSurface má hodnotu true, protože nakreslí normální stav povrchového zásahu, což vizuálně vysvětluje, proč je objekt nastaven na aktuální orientaci.
      • On Placing Started: Tato událost se aktivuje jednou při výběru herního objektu, který chcete umístit.
      • On Placing Stopped: Tato událost se aktivuje jednou, když je objekt hry, který se má umístit, nevybraný a umístěný.
  3. Testování chování klepnutím na umístění v editoru

    • Stisknutím klávesy Play a podržením mezerníku zobrazte vstupní simulační ruku.
    • Pohybujte rukou, dokud nebude fokus datové krychle, a simulujte kliknutí pomocí vstupní simulační ruky kliknutím levým myší.
      • Pokud se kolidéry ve scéně nenachází, bude objekt následovat za definovaným Default Placement Distanceobjektem TrackedTargetType .
    • Objekt bude sledovat pohyb TrackedTargetType po výběru. Pokud chcete simulovat pohyb hlavy v editoru, stiskněte klávesy WASD. Otáčení hlavy můžete změnit kliknutím a podržením pravého tlačítka myši.
    • Pokud chcete umisťování objektu ukončit, klikněte znovu. Při kliknutí na umístění zastavení nemusí být objekt v fokusu. Fokus se vyžaduje pouze pro počáteční kliknutí, které zahájí proces umístění.
    TrackedTargetType: Head (výchozí) TrackedTargetType: Kontroler Ray
    Klepnutím umístíte paprsek ovládání hlavy vstupní simulace. Klepnutím umístěte vstupní simulační kontroler Ray 2.

Klepnutím umístěte konfigurovatelnost kódu.

Časování výběru objektu lze ovládat také klepnutím StartPlacement()StopPlacement() na místo, aby se vyžadovala událost kliknutí. Tato funkce je užitečná pro psaní testů a poskytuje alternativní metodu pro umístění objektu do editoru bez použití vstupního systému MRTK.

  1. Vytvoření prázdného herního objektu

  2. Vytvořte a připojte následující ukázkový skript k prázdnému hernímu objektu.

    using UnityEngine;
    using Microsoft.MixedReality.Toolkit.Utilities.Solvers;
    
    public class TapToPlaceInputExample : MonoBehaviour
    {
        private GameObject cube;
        private TapToPlace tapToPlace;
    
        void Start()
        {
            cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.localScale = Vector3.one * 0.2f;
            cube.transform.position = Vector3.forward * 0.7f;
    
            tapToPlace = cube.AddComponent<TapToPlace>();
        }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.U))
            {
                tapToPlace.StartPlacement();
            }
            if (Input.GetKeyDown(KeyCode.I))
            {
                tapToPlace.StopPlacement();
            }
        }
    }
    
  3. V režimu přehrávání stiskněte klávesu U a začněte umísťovat datovou krychli.

  4. Umístění zastavíte stisknutím klávesy I .

Klepnutím umístíte ukázkové scény.

Ukázková scéna klepnutím na místo se skládá ze 4 umístitelných objektů, z nichž každý má jinou konfiguraci. Ukázková scéna obsahuje zdi, které znázorňují chování umístění povrchu, které jsou ve výchozím nastavení v hierarchii zakázané. Ukázkovou scénu najdete v balíčku Unity Microsoft.MixedReality.Toolkit.Unity.Examples na stránce vydané verze. Umístění scény je : MRTK. Examples/Demos/Solvers/Scenes/TapToPlaceExample.unity

Klepnutím umístíte příklad.

Viz také