AR maze
This is an Augmented reality (AR) maze game made using Unity and Vuforia.
In this game By targeting an image, the player sees the 3D model of the maze and plays with it by rotating the image.
Sample pictures
C# code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | using UnityEngine; public class Ball : MonoBehaviour { // Start is called before the first frame update void Start() { } void Update() { if ((gameObject.GetComponent<Rigidbody>().velocity.x > 0.01 || gameObject.GetComponent<Rigidbody>().velocity.y > 0.01) && !gameObject.GetComponent<AudioSource>().isPlaying) { gameObject.GetComponent<AudioSource>().Play(); } else if (gameObject.GetComponent<AudioSource>().isPlaying) { gameObject.GetComponent<AudioSource>().Pause(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System.Collections; using UnityEngine; public class End : MonoBehaviour { public GameObject winPanel; public GameObject winEffect; public float effectTime=10; void OnTriggerEnter(Collider other) { Destroy(other.gameObject); StartCoroutine(Win()); } IEnumerator Win() { gameObject.GetComponent<AudioSource>().Play(); winPanel.SetActive(true); winEffect.SetActive(true); yield return new WaitForSeconds(effectTime); gameObject.GetComponent<AudioSource>().Stop(); winPanel.SetActive(false); winEffect.SetActive(false); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /*============================================================================== Copyright (c) 2019 PTC Inc. All Rights Reserved. Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc. All Rights Reserved. Confidential and Proprietary - Protected under copyright and other laws. ==============================================================================*/ using UnityEngine; using Vuforia; /// <summary> /// A custom handler that implements the ITrackableEventHandler interface. /// /// Changes made to this file could be overwritten when upgrading the Vuforia version. /// When implementing custom event handler behavior, consider inheriting from this class instead. /// </summary> public class MyTrackableEventHandler : MonoBehaviour, ITrackableEventHandler { #region PROTECTED_MEMBER_VARIABLES protected TrackableBehaviour mTrackableBehaviour; protected TrackableBehaviour.Status m_PreviousStatus; protected TrackableBehaviour.Status m_NewStatus; #endregion // PROTECTED_MEMBER_VARIABLES #region UNITY_MONOBEHAVIOUR_METHODS protected virtual void Start() { mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) mTrackableBehaviour.RegisterTrackableEventHandler(this); } protected virtual void OnDestroy() { if (mTrackableBehaviour) mTrackableBehaviour.UnregisterTrackableEventHandler(this); } #endregion // UNITY_MONOBEHAVIOUR_METHODS #region PUBLIC_METHODS /// <summary> /// Implementation of the ITrackableEventHandler function called when the /// tracking state changes. /// </summary> public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { m_PreviousStatus = previousStatus; m_NewStatus = newStatus; Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " " + mTrackableBehaviour.CurrentStatus + " -- " + mTrackableBehaviour.CurrentStatusInfo); if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { OnTrackingFound(); } else if (previousStatus == TrackableBehaviour.Status.TRACKED && newStatus == TrackableBehaviour.Status.NO_POSE) { OnTrackingLost(); } else { // For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND // Vuforia is starting, but tracking has not been lost or found yet // Call OnTrackingLost() to hide the augmentations OnTrackingLost(); } } #endregion // PUBLIC_METHODS #region PROTECTED_METHODS protected virtual void OnTrackingFound() { if (mTrackableBehaviour) { var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true); var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true); var canvasComponents = mTrackableBehaviour.GetComponentsInChildren<Canvas>(true); // Enable rendering: foreach (var component in rendererComponents) component.enabled = true; // Enable colliders: foreach (var component in colliderComponents) component.enabled = true; // Enable canvas': foreach (var component in canvasComponents) component.enabled = true; } } protected virtual void OnTrackingLost() { if (mTrackableBehaviour) { var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true); //var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true); var canvasComponents = mTrackableBehaviour.GetComponentsInChildren<Canvas>(true); // Disable rendering: foreach (var component in rendererComponents) component.enabled = false; // Disable colliders: // foreach (var component in colliderComponents) // component.enabled = false; // Disable canvas': foreach (var component in canvasComponents) component.enabled = false; } } #endregion // PROTECTED_METHODS } |