點選到 [放置] 是一個遠距互動元件,用來將遊戲物件放在表面。 此元件適用于將物件放在空間網格上。 點選到 [放置] 會使用兩次點選和頭部移動的組合來放置物件。 按一下即可開始放置、頭部移動以控制物件的位置,然後按一下即可將物件放在場景中。
使用點選放置
設定場景
- 建立新的 Unity 場景
- 流覽至 [新增至場景] 和 [設定],以將 MRTK新增至場景Mixed Reality工具組>
注意
點選至 [放置] 會使用由 MRTK 輸入系統驅動的點擊,但也可以不受按一下控制,請參閱下方的 [點選放置程式碼設定能力] 區段。
- 將 Cube 新增至場景,並將縮放比例變更為 0.2,並將位置變更為 (0、0、0.7) 。
將 點選附加至具有 碰撞器的遊戲物件
- 新增 [點選到放置] 元件時,也會附加規劃求解處理常式。 點選至 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:當要放置的遊戲物件未選取、放置時,就會觸發此事件一次。
-
- 新增 [點選到放置] 元件時,也會附加規劃求解處理常式。 點選至 Place 衍生自需要規劃求解處理常式的 規劃求解 類別。 Tap to Place 物件的位置是相對於規劃求解處理常式內的 計算
測試點選以在編輯器中放置行為
- 按播放並按住空格鍵以顯示輸入模擬手。
- 移動手部,直到立方體處於焦點,並透過按一下滑鼠左鍵來模擬輸入模擬手部的點選。
- 如果場景中沒有碰撞器,物件將會遵循
TrackedTargetType定義的Default Placement Distance。
- 如果場景中沒有碰撞器,物件將會遵循
- 物件會遵循選取之後的
TrackedTargetType移動。 若要模擬編輯器中的頭部移動,請按 WASD 鍵。 按一下滑鼠右鍵並按住滑鼠來變更頭部旋轉。 - 若要停止放置物件,請再按一下一次。 物件不需要成為停止放置點選的焦點。 只有啟動放置程式的初始按一下才需要焦點。
TrackedTargetType:前端 (預設)TrackedTargetType:控制器光線
點選以放置程式碼設定
點選至 [放置物件選取時間] 也可以透過 StartPlacement() 和 StopPlacement() 來控制,而不需要按一下事件。 這項功能適用于撰寫測試,並提供替代方法,讓您不需要使用 MRTK 輸入系統,即可將物件放在編輯器中。
建立空的遊戲物件
建立下列範例腳本並附加至空的遊戲物件
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(); } } }在播放模式中,按 U 鍵 以開始放置 Cube
按下 I 鍵 以停止放置
點選以放置範例場景
Tap to Place 範例場景包含 4 個可放置的物件,每個物件都有不同的組態。 此範例場景包含牆,以顯示階層中預設停用的介面放置行為。 您可以在發行 頁面上找到的 Microsoft.MixedReality.Toolkit.Unity.Examples unity 套件中找到範例場景。 場景位置為: MRTK。Examples/Demos/Solvers/Scenes/TapToPlaceExample.unity
另請參閱
- 解算器
- 空間感知
- 輸入模擬
- Hand Tracking (手部追蹤)
- 目光