共用方式為


點選以放置 — MRTK2

TapToPlace

點選到 [放置] 是一個遠距互動元件,用來將遊戲物件放在表面。 此元件適用于將物件放在空間網格上。 點選到 [放置] 會使用兩次點選和頭部移動的組合來放置物件。 按一下即可開始放置、頭部移動以控制物件的位置,然後按一下即可將物件放在場景中。

使用點選放置

  1. 設定場景

    • 建立新的 Unity 場景
    • 流覽至 [新增至場景] 和 [設定],以將 MRTK新增至場景Mixed Reality工具組>

    注意

    點選至 [放置] 會使用由 MRTK 輸入系統驅動的點擊,但也可以不受按一下控制,請參閱下方的 [點選放置程式碼設定能力] 區段。

    • 將 Cube 新增至場景,並將縮放比例變更為 0.2,並將位置變更為 (0、0、0.7) 。
  2. 點選附加至具有 碰撞器的遊戲物件

    TapToPlaceInspector

    • 新增 [點選到放置] 元件時,也會附加規劃求解處理常式。 點選至 Place 衍生自需要規劃求解處理常式的 規劃求解 類別。 Tap to Place 物件的位置是相對於規劃求解處理常式內的 計算 TrackedTargetType 。 根據預設,Head 是 TrackedTargetType ,亦即當頭部移動時,如果選取該物件,則會遵循該物件。 TrackedTargetType也可以設定為控制器 Ray,其物件遵循控制器。 點選到位置偵測器中的第一組屬性是 一般規劃求解屬性

    重要

    點選到 [放置] 是獨立的規劃求解,無法與其他求解器鏈結。 無法鏈結,因為 SolverHandler.UpdateSolvers 是用來在放置物件時更新物件的位置。

    • 點選以放置屬性:
      • Auto Start:如果為 true,點選到放置規劃求解會開始控制要放置的遊戲物件位置。 物件會緊接在 TrackedTargetType (Head 或 Controller Ray) 之後開始。 叫用 Start () 之前,必須先修改此值,才能有任何作用。
      • Default Placement Distance:) 物件相對於 SolverHandler 中的 TrackedTargetType 向前放置,以公尺為單位的預設距離 (。 如果表面未由光線廣播點擊,遊戲物件將會置於預設放置距離。
      • Max Raycast Distance:根據 'TrackedTargetType' 原點,光線廣播的最大距離 (公尺) 。 此光線廣播會尋找表面來放置選取的物件。
      • UseDefaultSurfaceNormalOffset:此屬性預設為 true,可確保放置的物件對齊表面。 如果此屬性為 true,則會套用預設表面標準位移,而不是針對 SurfaceNormalOffset 屬性指定的任何值。 如果為 false,將會套用 的 SurfaceNormalOffset 值。 預設表面標準位移是沿著 Z 軸的碰撞器範圍。
      • Surface Normal Offset:如果光線廣播到達表面,則遊戲物件中心與表面正常放置和表面之間的距離。 此屬性只有在 為 false 時 UseDefaultSurfaceNormalOffset 才會套用至物件。
      • Keep Orientation Vertical:如果為 true,要放置的遊戲物件會保持直立,並符合 Vector3.up。
      • Rotate According to Surface:如果為 false,要放置的遊戲物件將不會根據表面點擊變更其旋轉。 當 IsBeingPlaced 為 true 時,物件會維持在相機正向。
      • Magnetic Surfaces:要從最高優先順序到最低優先順序執行的 LayerMasks 陣列。 提供光線廣播點擊的第一層遮罩將用於位置計算。
      • Debug Enabled:如果為 true 且在 Unity 編輯器中,則光線廣播點擊的一般會以黃色繪製。 啟用偵錯的時機 RotateAccordingToSurface 很實用,因為它會繪製表面點擊的一般,以視覺化方式說明物件目前的方向設定的原因。
      • On Placing Started:選取要放置的遊戲物件時,就會觸發此事件一次。
      • On Placing Stopped:當要放置的遊戲物件未選取、放置時,就會觸發此事件一次。
  3. 測試點選以在編輯器中放置行為

    • 按播放並按住空格鍵以顯示輸入模擬手。
    • 移動手部,直到立方體處於焦點,並透過按一下滑鼠左鍵來模擬輸入模擬手部的點選。
      • 如果場景中沒有碰撞器,物件將會遵循 TrackedTargetType 定義的 Default Placement Distance
    • 物件會遵循選取之後的 TrackedTargetType 移動。 若要模擬編輯器中的頭部移動,請按 WASD 鍵。 按一下滑鼠右鍵並按住滑鼠來變更頭部旋轉。
    • 若要停止放置物件,請再按一下一次。 物件不需要成為停止放置點選的焦點。 只有啟動放置程式的初始按一下才需要焦點。
    TrackedTargetType:前端 (預設) TrackedTargetType:控制器光線
    點選以放置輸入模擬前端控制光線 點選以放置輸入模擬控制器光線 2

點選以放置程式碼設定

點選至 [放置物件選取時間] 也可以透過 StartPlacement()StopPlacement() 來控制,而不需要按一下事件。 這項功能適用于撰寫測試,並提供替代方法,讓您不需要使用 MRTK 輸入系統,即可將物件放在編輯器中。

  1. 建立空的遊戲物件

  2. 建立下列範例腳本並附加至空的遊戲物件

    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. 在播放模式中,按 U 鍵 以開始放置 Cube

  4. 按下 I 鍵 以停止放置

點選以放置範例場景

Tap to Place 範例場景包含 4 個可放置的物件,每個物件都有不同的組態。 此範例場景包含牆,以顯示階層中預設停用的介面放置行為。 您可以在發行 頁面上找到的 Microsoft.MixedReality.Toolkit.Unity.Examples unity 套件中找到範例場景。 場景位置為: MRTK。Examples/Demos/Solvers/Scenes/TapToPlaceExample.unity

點選以放置範例

另請參閱