// 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); }
// 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()); }
// 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); }
// 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()); }
// 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); }
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(); } }
// 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"); } }
// 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; }
// 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 }
// 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 }