## 3 Review of Indoor Navigation System Using Unity and a Smartphone (INSUS)
### Unity Game Engine  
The _Unity game engine_ is a development platform widely used for creating immersive applications [39]. It specializes in real-time rendering and simulation, making it ideal for applications such as games, simulations, and \(AR\) experiences [40]. Unity's robust feature set includes support for multi-platform deployment, a powerful physics engine, and extensive libraries for graphics and animation [41].  
In our system, Unity serves as the primary platform for integrating inputs, enabling navigational processes through the \(AR\) interface, performing _path-planning_ in the 3D environment, visualizing the _user interface_, and managing external communication through the _Unity Web Request_ module.  
_Unity_ utilizes \(AR\) Foundation as an _AR software development kit (SDK)_. It utilizes continuous camera inputs and gyroscope sensors to determine real-time localization via the _SLAM_ algorithm and by rendering 3D navigation guides that overlay the real environment through the \(AR\) interface. The _SLAM_ implementation from \(AR\) Foundation is based on _Oriented Rotated Brief (ORB)-SLAM_[42], which works through feature extraction, feature tracking, pose estimation, and mapping [43]. Feature extraction and tracking involve identifying distinctive features in images captured by the camera and tracking them across multiple frames. This tracking provides information regarding the user's pose, rotation, and position.  
In this study, _SLAM_'s function for the mapping process was not applied because a 3D environment had already been prepared. The _Unity game engine_ facilitates the creation of a _NavMesh_ to perform _path-planning_ in a predefined 3D environment. The _NavMesh_ enables the A* algorithm to use the 3D environment as a map to find the fastest path to the target position [44].  
The limitation of the current implementation is the loss of direction, which results from small accumulated errors in various components used for _SLAM_ localization. These errors can arise from camera miscalibration, inaccuracies in feature tracking, path-planning algorithms, and _NavMesh_ being misaligned from the real environment. As these small errors accumulate, they lead to significant localization errors, hindering the visualization process of the path from the user's current location to the destination. It is necessary to reset the location using a \(QR\) code to eliminate these accumulated errors. However, the current implementation of the _user location reset_ method requires the placement of a lot of \(QR\) codes throughout the building, adding an extra burden during the implementation process. To address this, we propose using pre-installed signs in the building as an alternative to \(QR\) codes through an _object detection function_ and _text extraction function_.  
The _user interface_ displays several components to facilitate interaction and navigation, including the initial login, \(QR\) code scanning, destination input, and real-time navigation guides. The _Unity Web Request_ module facilitates communication with the _SEMAR_ server by handling HTTP requests and responses to ensure reliable interactions between the _Unity game engine_ and the _SEMAR_ server.