예제 #1
0
    public void HandleInteractiveHitTest(HitTestResult result)
    {
        if (result == null)
        {
            Debug.LogError("Invalid hit test result!");
            return;
        }

        if (!m_GroundPlaneUI.IsCanvasButtonPressed())
        {
            Debug.Log("HandleInteractiveHitTest() called.");

            // If the PlaneFinderBehaviour's Mode is Automatic, then the Interactive HitTestResult will be centered.

            // PlaneMode.Ground and PlaneMode.Placement both use PlaneFinder's ContentPositioningBehaviour
            m_ContentPositioningBehaviour = m_PlaneFinder.GetComponent <ContentPositioningBehaviour>();
            m_ContentPositioningBehaviour.DuplicateStage = false;

            // Place object based on Ground Plane mode
            switch (planeMode)
            {
            case PlaneMode.GROUND:

                m_ContentPositioningBehaviour.AnchorStage = m_PlaneAnchor;
                m_ContentPositioningBehaviour.PositionContentAtPlaneAnchor(result);
                UtilityHelperRes.EnableRendererColliderCanvas(m_PlaneAugmentation, true);

                // Astronaut should rotate toward camera with each placement
                m_PlaneAugmentation.transform.localPosition = Vector3.zero;
                UtilityHelperRes.RotateTowardCamera(m_PlaneAugmentation);

                AstronautIsPlaced = true;

                break;

            case PlaneMode.PLACEMENT:

                if (!m_ProductPlacement.IsPlaced || TouchHandlerRes.DoubleTap)
                {
                    m_ContentPositioningBehaviour.AnchorStage = m_PlacementAnchor;
                    m_ContentPositioningBehaviour.PositionContentAtPlaneAnchor(result);
                    UtilityHelperRes.EnableRendererColliderCanvas(m_PlacementAugmentation, true);
                }

                if (!m_ProductPlacement.IsPlaced)
                {
                    m_ProductPlacement.SetProductAnchor(m_PlacementAnchor.transform);
                    m_TouchHandler.enableRotation = true;
                }

                break;
            }
        }
    }
예제 #2
0
    public void PlaceObjectInMidAir(Transform midAirTransform)
    {
        if (planeMode == PlaneMode.MIDAIR)
        {
            Debug.Log("PlaceObjectInMidAir() called.");

            m_ContentPositioningBehaviour.AnchorStage = m_MidAirAnchor;
            m_ContentPositioningBehaviour.PositionContentAtMidAirAnchor(midAirTransform);
            UtilityHelperRes.EnableRendererColliderCanvas(m_MidAirAugmentation, true);

            m_MidAirAugmentation.transform.localPosition = Vector3.zero;
            UtilityHelperRes.RotateTowardCamera(m_MidAirAugmentation);
        }
    }
예제 #3
0
 public void SetProductAnchor(Transform transform)
 {
     if (transform)
     {
         IsPlaced = true;
         gameObject.transform.SetParent(transform);
         gameObject.transform.localPosition = Vector3.zero;
         UtilityHelperRes.RotateTowardCamera(gameObject);
     }
     else
     {
         IsPlaced = false;
         gameObject.transform.SetParent(null);
     }
 }
예제 #4
0
    void Update()
    {
        if (PlaneManagerRes.planeMode == PlaneManagerRes.PlaneMode.PLACEMENT)
        {
            shadowRenderer.enabled = chairRenderer.enabled = (IsPlaced || PlaneManagerRes.GroundPlaneHitReceived);
            EnablePreviewModeTransparency(!IsPlaced);
            if (!IsPlaced)
            {
                UtilityHelperRes.RotateTowardCamera(gameObject);
            }
        }
        else
        {
            shadowRenderer.enabled = chairRenderer.enabled = IsPlaced;
        }

        if (PlaneManagerRes.planeMode == PlaneManagerRes.PlaneMode.PLACEMENT && IsPlaced)
        {
            m_RotationIndicator.SetActive(Input.touchCount == 2);

            m_TranslationIndicator.SetActive(
                (TouchHandlerRes.IsSingleFingerDragging || TouchHandlerRes.IsSingleFingerStationary) && !m_GroundPlaneUI.IsCanvasButtonPressed());

            if (TouchHandlerRes.IsSingleFingerDragging || (VuforiaRuntimeUtilities.IsPlayMode() && Input.GetMouseButton(0)))
            {
                if (!m_GroundPlaneUI.IsCanvasButtonPressed())
                {
                    cameraToPlaneRay = mainCamera.ScreenPointToRay(Input.mousePosition);

                    if (Physics.Raycast(cameraToPlaneRay, out cameraToPlaneHit))
                    {
                        if (cameraToPlaneHit.collider.gameObject.name ==
                            (VuforiaRuntimeUtilities.IsPlayMode() ? EmulatorGroundPlane : Floor.name))
                        {
                            gameObject.PositionAt(cameraToPlaneHit.point);
                        }
                    }
                }
            }
        }
        else
        {
            m_RotationIndicator.SetActive(false);
            m_TranslationIndicator.SetActive(false);
        }
    }
예제 #5
0
    static bool anchorExists; // backs public AnchorExists property
    #endregion                // PRIVATE_MEMBERS


    #region MONOBEHAVIOUR_METHODS

    void Start()
    {
        VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted);
        VuforiaARController.Instance.RegisterOnPauseCallback(OnVuforiaPaused);
        DeviceTrackerARController.Instance.RegisterTrackerStartedCallback(OnTrackerStarted);
        DeviceTrackerARController.Instance.RegisterDevicePoseStatusChangedCallback(OnDevicePoseStatusChanged);

        m_PlaneFinder.HitTestMode = HitTestMode.AUTOMATIC;

        m_ProductPlacement = FindObjectOfType <ProductPlacementRes>();
        m_TouchHandler     = FindObjectOfType <TouchHandlerRes>();
        m_GroundPlaneUI    = FindObjectOfType <GroundPlaneUIRes>();

        m_PlaneAnchor     = m_PlaneAugmentation.GetComponentInParent <AnchorBehaviour>();
        m_MidAirAnchor    = m_MidAirAugmentation.GetComponentInParent <AnchorBehaviour>();
        m_PlacementAnchor = m_PlacementAugmentation.GetComponentInParent <AnchorBehaviour>();

        UtilityHelperRes.EnableRendererColliderCanvas(m_PlaneAugmentation, false);
        UtilityHelperRes.EnableRendererColliderCanvas(m_MidAirAugmentation, false);
        UtilityHelperRes.EnableRendererColliderCanvas(m_PlacementAugmentation, false);
    }
예제 #6
0
    public void ResetScene()
    {
        Debug.Log("ResetScene() called.");

        // reset augmentations
        m_PlaneAugmentation.transform.position         = Vector3.zero;
        m_PlaneAugmentation.transform.localEulerAngles = Vector3.zero;
        UtilityHelperRes.EnableRendererColliderCanvas(m_PlaneAugmentation, false);

        m_MidAirAugmentation.transform.position         = Vector3.zero;
        m_MidAirAugmentation.transform.localEulerAngles = Vector3.zero;
        UtilityHelperRes.EnableRendererColliderCanvas(m_MidAirAugmentation, false);

        m_ProductPlacement.Reset();
        UtilityHelperRes.EnableRendererColliderCanvas(m_PlacementAugmentation, false);

        DeleteAnchors();
        m_ProductPlacement.SetProductAnchor(null);
        AstronautIsPlaced = false;
        m_GroundPlaneUI.Reset();
        m_TouchHandler.enableRotation = false;
    }