/// <summary> /// オブジェクトを置く /// </summary> /// <param name="touch">タッチ情報</param> private void PutObjects(Touch touch) { if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began) { return; } if (EventSystem.current.IsPointerOverGameObject(touch.fingerId)) { return; } // 認識した面によって生成するオブジェクトを切り替える TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon | TrackableHitFlags.FeaturePointWithSurfaceNormal; if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out TrackableHit hit)) { if ((hit.Trackable is DetectedPlane) && Vector3.Dot(ARCamera.transform.position - hit.Pose.position, hit.Pose.rotation * Vector3.up) < 0) { } else { if (hit.Trackable is FeaturePoint) { return; } else if (hit.Trackable is DetectedPlane) { DetectedPlane detectedPlane = hit.Trackable as DetectedPlane; if (detectedPlane.PlaneType == DetectedPlaneType.Vertical) { // 壁オブジェクト生成 GameObject obj = wallProduct.PutWall(wallIndex, hit.Pose.position, hit.Pose.rotation); Anchor anchor = hit.Trackable.CreateAnchor(hit.Pose); obj.transform.parent = anchor.transform; } else if (detectedPlane.PlaneType == DetectedPlaneType.HorizontalDownwardFacing) { // 天井オブジェクト生成 GameObject obj = ceilingProduct.PutCeiling(ceilingIndex, hit.Pose.position, hit.Pose.rotation); Anchor anchor = hit.Trackable.CreateAnchor(hit.Pose); obj.transform.parent = anchor.transform; } else if (detectedPlane.PlaneType == DetectedPlaneType.HorizontalUpwardFacing) { // 床オブジェクト生成 GameObject obj = floorProduct.PutFloor(floorIndex, hit.Pose.position, hit.Pose.rotation); Anchor anchor = hit.Trackable.CreateAnchor(hit.Pose); obj.transform.parent = anchor.transform; } } else { return; } } } }