diff --git a/TapToPlace_MoveUpByHalfHeight.cs b/TapToPlace_MoveUpByHalfHeight.cs new file mode 100644 index 0000000..e872645 --- /dev/null +++ b/TapToPlace_MoveUpByHalfHeight.cs @@ -0,0 +1,42 @@ +using HoloToolkit.Unity.SpatialMapping; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class TapToPlace_MoveUpByHalfHeight : TapToPlace { + + + protected override void Update () { + // If the user is in placing mode, + // update the placement to match the user's gaze. + if (IsBeingPlaced) { + // Do a raycast into the world that will only hit the Spatial Mapping mesh. + Vector3 headPosition = Camera.main.transform.position; + Vector3 gazeDirection = Camera.main.transform.forward; + + RaycastHit hitInfo; + if (Physics.Raycast(headPosition, gazeDirection, out hitInfo, 30.0f, spatialMappingManager.LayerMask)) { + // Rotate this object to face the user. + Quaternion toQuat = Camera.main.transform.localRotation; + toQuat.x = 0; + toQuat.z = 0; + + float halfY = (gameObject.GetComponent().bounds.size.y) / 2; + Vector3 pos = hitInfo.point; + pos.y = hitInfo.point.y + halfY; + + // Move this object to where the raycast + // hit the Spatial Mapping mesh. + if (PlaceParentOnTap) { + // Place the parent object as well but keep the focus on the current game object + Vector3 currentMovement = hitInfo.point - gameObject.transform.position; + ParentGameObjectToPlace.transform.position += currentMovement; + ParentGameObjectToPlace.transform.rotation = toQuat; + } else { + gameObject.transform.position = pos; + gameObject.transform.rotation = toQuat; + } + } + } + } +}