// Update is called once per frame void Update() { Touch touch; if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began) { return; } // Raycast against the location the player touched to search for planes. TrackableHit hit; TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon | TrackableHitFlags.FeaturePointWithSurfaceNormal; if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit)) { if (SetupState == SetupStates.FindFloor) { _suggestedFloorHeight = hit.Pose.position.y; SwitchState(SetupStates.ConfirmFloor); } else if (SetupState == SetupStates.AddObstacles) { if (hit.Trackable is DetectedPlane) { DetectedPlane plane = hit.Trackable as DetectedPlane; GameObject go = Instantiate(ObstaclePrefab, hit.Pose.position, hit.Pose.rotation, PlayfieldObjects); ObstacleController controller = go.GetComponent <ObstacleController>(); controller.Setup(plane, _suggestedFloorHeight); _renderers.Add(controller.GetRenderer()); } } } }