Umístění klepnutím – MRTK2
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
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).
Připojení funkce Klepnutí na místo k hernímu objektu pomocí skoliéru
- 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čkaTrackedTargetType
, tj. když se hlava přesune, objekt následuje, pokud je vybrán. LzeTrackedTargetType
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é proSurfaceNormalOffset
vlastnost. Pokud je false, použije se hodnota proSurfaceNormalOffset
. 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, pokudUseDefaultSurfaceNormalOffset
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é, pokudRotateAccordingToSurface
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ý.
- 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
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 Distance
objektemTrackedTargetType
.
- Pokud se kolidéry ve scéně nenachází, bude objekt následovat za definovaným
- 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 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.
Vytvoření prázdného herního objektu
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(); } } }
V režimu přehrávání stiskněte klávesu U a začněte umísťovat datovou krychli.
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