Пример #1
0
    /// <summary>
    /// Function called when the manipulation is ended.
    /// </summary>
    /// <param name="gesture">The current gesture.</param>
    protected override void OnEndManipulation(TapGesture gesture)
    {
        if (gesture.WasCancelled)
        {
            return;
        }

        // If gesture is targeting an existing object we are done.
        if (gesture.TargetObject != null)
        {
            Debug.Log("\nTarget Object != null");
            return;
        }

        if (IsPointerOverUIObject())
        {
            Debug.Log("\n\nIsPointerOverUIObject");
            return;
        }
        // Raycast against the location the player touched to search for planes.
        TrackableHit      hit;
        TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon;


        if (Frame.Raycast(
                gesture.StartPosition.x, gesture.StartPosition.y, raycastFilter, out hit))
        {
            // Use hit pose and camera pose to check if hittest is from the
            // back of the plane, if it is, no need to create the anchor.


            if ((hit.Trackable is DetectedPlane) &&
                Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position,
                            hit.Pose.rotation * Vector3.up) < 0)
            {
                Debug.Log("Hit at back of the current DetectedPlane");
            }
            else
            {
                // Instantiate game object at the hit pose.
                DetectedPlane detectedPlane = hit.Trackable as DetectedPlane;

                //Debug.Log("\n\n\n\n\ndetectedPlane.PlaneType=" + detectedPlane.PlaneType.ToString());
                //Debug.Log("DetectedPlaneType.HorizontalUpwardFacing=" + DetectedPlaneType.HorizontalUpwardFacing.ToString());
                //Debug.Log("currentNumberOfObjects=" + currentNumberOfObjects.ToString());
                //Debug.Log("numberOfObjectsAllowed=" + numberOfObjectsAllowed.ToString());
                //Debug.Log("===>Condition=" + (detectedPlane.PlaneType == DetectedPlaneType.HorizontalUpwardFacing && currentNumberOfObjects < numberOfObjectsAllowed).ToString());
                if (detectedPlane.PlaneType == DetectedPlaneType.Vertical && currentNumberOfVerticalObjects < numberOfObjectsAllowed)
                {
                    GameObject modelprefab = Instantiate(GameObjectVerticalPlanePrefab, hit.Pose.position, hit.Pose.rotation);
                    GenerateModels(modelprefab, hit);
                    currentNumberOfVerticalObjects++;
                }
                else if (detectedPlane.PlaneType == DetectedPlaneType.HorizontalUpwardFacing && currentNumberOfObjects < numberOfObjectsAllowed)
                {
                    //floor
                    //Debug.Log("\n\n hit horizontal !!!!!");

                    int prefabval = SetValue.getprefab();
                    if (prefabval == 0)
                    {
                        GameObject modelprefab = Instantiate(tablePrefab, hit.Pose.position, hit.Pose.rotation);
                        GenerateModels(modelprefab, hit);
                    }
                    else
                    {
                        GameObject modelprefab = Instantiate(chairPrefab, hit.Pose.position, hit.Pose.rotation);
                        GenerateModels(modelprefab, hit);
                    }

                    currentNumberOfObjects++;
                }
                else if (detectedPlane.PlaneType == DetectedPlaneType.HorizontalDownwardFacing && currentNumberOfUpObjects < numberOfObjectsAllowed)
                {
                    GameObject modelprefab = Instantiate(GameObjectHorizontalUpwardPlanePrefab, hit.Pose.position, hit.Pose.rotation);
                    GenerateModels(modelprefab, hit);
                    currentNumberOfUpObjects++;
                }
            }
        }
    }