Пример #1
0
 // Return the origin associated with this component.
 // Uses cached value if available, otherwise performs a find operation.
 public virtual AROrigin GetOrigin()
 {
     if (_origin == null)
     {
         // Locate the origin in parent.
         _origin = this.gameObject.GetComponentInParent <AROrigin>();
     }
     return(_origin);
 }
Пример #2
0
    // Get the marker, if any, currently acting as the base.
    public virtual ARMarker GetMarker()
    {
        AROrigin origin = GetOrigin();

        if (origin == null)
        {
            return(null);
        }
        return(origin.GetBaseMarker());
    }
Пример #3
0
 // Return the origin associated with this component.
 // Uses cached value if available, otherwise performs a find operation.
 public virtual AROrigin GetOrigin()
 {
     if (_origin == null)
     {
         // Locate the origin in parent.
         _origin = this.gameObject.GetComponentInParent <AROrigin>();            // Unity v4.5 and later.
         Debug.Log("origin.name = " + _origin.name);
     }
     return(_origin);
 }
Пример #4
0
    // Get the marker, if any, currently acting as the base.
    public virtual ARTrackable GetTrackable()
    {
        AROrigin origin = GetOrigin();

        if (origin == null)
        {
            return(null);
        }
        return(origin.GetBaseTrackable());
    }
Пример #5
0
    // Use this for initialization
    void Start()
    {
        arOrigin = this.gameObject.GetComponentInParent <AROrigin>();
        audio1   = GameObject.FindGameObjectWithTag("arAudio1").GetComponent <AudioSource>();
        audio2   = GameObject.FindGameObjectWithTag("arAudio2").GetComponent <AudioSource>();


        markers = FindObjectsOfType(typeof(ARMarker)) as ARMarker[];
        foreach (ARMarker m in markers)
        {
            m.OnDisable();
        }

        myARController = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <ARController>();
        FXCamera.SetActive(false);
    }
Пример #6
0
    public override void OnInspectorGUI()
    {
        // Get the AROrigin that this panel will edit.
        AROrigin o = (AROrigin)target;

        if (o == null)
        {
            return;
        }

        // Find mode
        o.findTrackableMode = (AROrigin.FindMode)EditorGUILayout.EnumPopup("ARTrackable find mode", o.findTrackableMode);

        if (o.findTrackableMode == AROrigin.FindMode.AutoByTags)
        {
            serializedObject.Update();
            EditorGUILayout.PropertyField(serializedObject.FindProperty("findTrackableTags"), true);
            serializedObject.ApplyModifiedProperties();
            //o.FindMarkers();
        }
    }
Пример #7
0
    // Use LateUpdate to be sure the ARMarker has updated before we try and use the transformation.
    void LateUpdate()
    {
        // Local scale is always 1 for now
        transform.localScale = Vector3.one;

        // Update tracking if we are running in the Player.
        if (Application.isPlaying)
        {
            // Sanity check, make sure we have an AROrigin in parent hierachy.
            AROrigin origin = GetOrigin();
            if (origin == null)
            {
                ARController.Log(LogTag + "No Origin");
                //visible = visibleOrRemain = false;
            }
            else
            {
                // Sanity check, make sure we have an ARMarker assigned.
                ARMarker marker = GetMarker();
                if (marker == null)
                {
                    ARController.Log(LogTag + "No ARMarker");
                    //visible = visibleOrRemain = false;
                }
                else
                {
                    // Note the current time
                    float timeNow = Time.realtimeSinceStartup;

                    ARMarker baseMarker = origin.GetBaseMarker();
                    if (baseMarker != null && marker.Visible)
                    {
                        if (!visible)
                        {
                            // Marker was hidden but now is visible.
                            ARController.Log(LogTag + "Marker was hidden but now is visible.");
                            visible = visibleOrRemain = true;
                            if (eventReceiver != null)
                            {
                                eventReceiver.BroadcastMessage("OnMarkerFound", marker, SendMessageOptions.DontRequireReceiver);
                            }

                            for (int i = 0; i < this.transform.childCount; i++)
                            {
                                this.transform.GetChild(i).gameObject.SetActive(true);
                            }
                        }
                        else
                        {
//							ARController.Log (LogTag + "Marker stayed visible");
                        }

                        Matrix4x4 pose;
                        if (marker == baseMarker)
                        {
                            // If this marker is the base, no need to take base inverse etc.
                            pose = origin.transform.localToWorldMatrix;
                        }
                        else
                        {
                            pose = (origin.transform.localToWorldMatrix * baseMarker.TransformationMatrix.inverse * marker.TransformationMatrix);
                        }
                        transform.position = ARUtilityFunctions.PositionFromMatrix(pose);
                        transform.rotation = ARUtilityFunctions.QuaternionFromMatrix(pose);

                        if (eventReceiver != null)
                        {
                            eventReceiver.BroadcastMessage("OnMarkerTracked", marker, SendMessageOptions.DontRequireReceiver);
                        }
                    }
                    else
                    {
                        if (visible)
                        {
                            // Marker was visible but now is hidden.
                            ARController.Log(LogTag + "Marker was visible but now is hidden. (after " + secondsToRemainVisible + "s)");
                            visible          = false;
                            timeTrackingLost = timeNow;
                        }
                        else
                        {
//							ARControllertroller.Log (LogTag + "Marker stayed hidden.");
                        }

                        if (visibleOrRemain && (timeNow - timeTrackingLost >= secondsToRemainVisible))
                        {
                            visibleOrRemain = false;
                            if (eventReceiver != null)
                            {
                                eventReceiver.BroadcastMessage("OnMarkerLost", marker, SendMessageOptions.DontRequireReceiver);
                            }
                            for (int i = 0; i < this.transform.childCount; i++)
                            {
                                this.transform.GetChild(i).gameObject.SetActive(false);
                            }
                        }
                    }
                }  // marker
            }      // origin
        }          // Application.isPlaying
        else
        {
            ARController.Log(LogTag + "Applicaiton Not Playing");
        }
    }
Пример #8
0
	// Return the origin associated with this component.
	// Uses cached value if available, otherwise performs a find operation.
	public virtual AROrigin GetOrigin()
	{
		if (_origin == null) {
			// Locate the origin in parent.
			_origin = this.gameObject.GetComponentInParent<AROrigin>();
		}
		return _origin;
	}
Пример #9
0
    // Use LateUpdate to be sure the ARTrackable has updated before we try and use the transformation.
    void LateUpdate()
    {
        // Local scale is always 1 for now
        transform.localScale = Vector3.one;

        // Update tracking if we are running in the Player.
        if (Application.isPlaying)
        {
            // Sanity check, make sure we have an AROrigin in parent hierachy.
            AROrigin origin = GetOrigin();
            if (origin == null)
            {
                //visible = visibleOrRemain = false;
            }
            else
            {
                // Sanity check, make sure we have an ARTrackable assigned.
                ARTrackable trackable = GetTrackable();
                if (trackable == null)
                {
                    //visible = visibleOrRemain = false;
                }
                else
                {
                    // Note the current time
                    float timeNow = Time.realtimeSinceStartup;

                    ARTrackable baseTrackable = origin.GetBaseTrackable();
                    if (baseTrackable != null && trackable.Visible)
                    {
                        if (!visible)
                        {
                            // Trackable was hidden but now is visible.
                            visible = visibleOrRemain = true;
                            if (eventReceiver != null)
                            {
                                eventReceiver.BroadcastMessage("OnTrackableFound", trackable, SendMessageOptions.DontRequireReceiver);
                            }

                            for (int i = 0; i < this.transform.childCount; i++)
                            {
                                this.transform.GetChild(i).gameObject.SetActive(true);
                            }
                        }

                        Matrix4x4 pose;
                        if (trackable == baseTrackable)
                        {
                            // If this marker is the base, no need to take base inverse etc.
                            pose = origin.transform.localToWorldMatrix;
                        }
                        else
                        {
                            pose = (origin.transform.localToWorldMatrix * baseTrackable.TransformationMatrix.inverse * trackable.TransformationMatrix);
                        }
                        transform.position = ARUtilityFunctions.PositionFromMatrix(pose);
                        transform.rotation = ARUtilityFunctions.QuaternionFromMatrix(pose);

                        if (eventReceiver != null)
                        {
                            eventReceiver.BroadcastMessage("OnTrackableTracked", trackable, SendMessageOptions.DontRequireReceiver);
                        }
                    }
                    else
                    {
                        if (visible)
                        {
                            // Trackable was visible but now is hidden.
                            visible          = false;
                            timeTrackingLost = timeNow;
                        }

                        if (visibleOrRemain && (timeNow - timeTrackingLost >= secondsToRemainVisible))
                        {
                            visibleOrRemain = false;
                            if (eventReceiver != null)
                            {
                                eventReceiver.BroadcastMessage("OnTrackableLost", trackable, SendMessageOptions.DontRequireReceiver);
                            }
                            for (int i = 0; i < this.transform.childCount; i++)
                            {
                                this.transform.GetChild(i).gameObject.SetActive(false);
                            }
                        }
                    }
                } // marker
            }     // origin
        }         // Application.isPlaying
    }
Пример #10
0
    // Use LateUpdate to be sure the ARMarker has updated before we try and use the transformation.
    void LateUpdate()
    {
        // Local scale is always 1 for now
        transform.localScale = Vector3.one;

        // Update tracking if we are running in the Player.
        if (Application.isPlaying)
        {
            // Sanity check, make sure we have an AROrigin in parent hierachy.
            AROrigin origin = GetOrigin();
            if (origin == null)
            {
                //visible = visibleOrRemain = false;
                return;
            }
            // Sanity check, make sure we have an ARMarker assigned.
            ARMarker marker = GetMarker();
            if (marker == null)
            {
                //visible = visibleOrRemain = false;
                return;
            }

            // Note the current time
            timeNowSeconds = Time.realtimeSinceStartup;

            ARMarker baseMarker = origin.GetBaseMarker();
            if (baseMarker != null && marker.Visible)
            {
                if (!visible)
                {
                    // Marker was hidden but now is visible.
                    visible = visibleOrRemain = true;
                    if (eventReceiver != null)
                    {
                        eventReceiver.BroadcastMessage("OnMarkerFound", marker, SendMessageOptions.DontRequireReceiver);
                    }
                    for (int i = 0; i < this.transform.childCount; i++)
                    {
                        this.transform.GetChild(i).gameObject.SetActive(true);
                    }
                }

                Matrix4x4 pose;
                if (marker == baseMarker)
                {
                    // If this marker is the base, no need to take base inverse etc.
                    pose = origin.transform.localToWorldMatrix;
                }
                else
                {
                    pose = (origin.transform.localToWorldMatrix * baseMarker.TransformationMatrix.inverse * marker.TransformationMatrix);
                }
                transform.position = ARUtilityFunctions.PositionFromMatrix(pose);
                transform.rotation = ARUtilityFunctions.QuaternionFromMatrix(pose);

                if (eventReceiver != null)
                {
                    eventReceiver.BroadcastMessage("OnMarkerTracked", marker, SendMessageOptions.DontRequireReceiver);
                }
                OnMarkerMadeVisible(marker);
            }
            else
            {
                OnMarkerLost(marker);
            }
        }         // Application.isPlaying
    }