コード例 #1
0
    /// <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;
                }
            }
        }
    }