How to show indoor navigation path with the help of beacons using Unity and ARkit?

I am using beacons to show an indoor path using Unity Augmented Reality feature.I have bought a plugin from asset store.From beacons I am getting the RSSI(strength).I am using only a single beacon.I could pop up a message or model when inside the range.

1)How to show the direction from device to where the beacon is situated?Should I use triangulation method(Deep knowledge in maths required?)?How to achieve it?

2)Is there any alternate method other than using beacons.I think it is the future without using beacons. Blippar is already working on it(2019).

Updated question

@SunnyChow Hi,I tried Placenote in unity when I placed my models and then I scanned.After saving the map and reloading the model was not in their place.From what I understand only the real world features gets saved.If I have many models how to save their positions and while loading them how to get back them at earlier placed positions.My tried code below.The below code I added to a empty gameobject as a child of camera.

    public GameObject arrow;
    	void Update () 
        {
            var touch = Input.GetTouch(0);
            if(touch.phase==TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject(touch.fingerId))
            {
                LibPlacenote.Instance.StartSession();
                GameObject go = Instantiate(arrow, transform.position, transform.rotation);
    
            }
    
    	}

**Below My main controller script**

    public void OnDropShapeClick()
        {
            LibPlacenote.Instance.StartSession();
        }
   
        // Runs when a new pose is received from Placenote.    
        public void OnPose(Matrix4x4 outputPose, Matrix4x4 arkitPose) 
        {
            
        }
    
        // Runs when LibPlacenote sends a status change message like Localized!
        public void OnStatusChange(LibPlacenote.MappingStatus prevStatus, LibPlacenote.MappingStatus currStatus)
        { 
            if (currStatus == LibPlacenote.MappingStatus.RUNNING && prevStatus == LibPlacenote.MappingStatus.LOST)
            {
                Debug.Log("Localized!")
            }
        }
      
        public void OnSaveMapClick()
        {
            if (!LibPlacenote.Instance.Initialized())
            {
                Debug.Log("SDK not yet initialized");
                ToastManager.ShowToast("SDK not yet initialized", 2f);
                return;
            }
    
            //mLabelText.text = "Saving...";
            LibPlacenote.Instance.SaveMap(
                (mapId) => {
                    LibPlacenote.Instance.StopSession();
                    Debug.Log("Saved Map Id:" + mapId);
                PlayerPrefs.SetString("MapIDs",mapId);
                Debug.Log("prefsmapid " + mapId);
                },
                (completed, faulted, percentage) => {
                    Debug.Log("Uploading map...");
                StatusText.text = "Uploading"+ "(" + percentage.ToString("F2") + "/1.0)";
                    if (completed)
                    {
                        Debug.Log("Done Uploading!");
                    StatusText.text = "Completed";
                    }
    
                }
            );
        }
    
    
    
        public void OnLoadMapClicked()
        {
            if (!LibPlacenote.Instance.Initialized())
            {
                Debug.Log("SDK not yet initialized");
                ToastManager.ShowToast("SDK not yet initialized", 2f);
                return;
            }
    
            // hard code a mapID in here until you can save mapID's
          //  var mSelectedMapId = "Paste Map ID here";
            var mSelectedMapId= PlayerPrefs.GetString("MapIDs");
            Debug.Log("prefsmapidload "+ mSelectedMapId);
    
            LibPlacenote.Instance.LoadMap(mSelectedMapId,
                (completed, faulted, percentage) =>
                {
    
                    StatusText.text = ("mapid savedloaded " + "(" + percentage.ToString("F2") + "/1.0)");
                    Debug.Log("mapid save " + mapidstring);
    
                    if (completed)
                    {
    
                        LibPlacenote.Instance.StartSession();
                        Debug.Log("Loaded ID: " + mSelectedMapId);
                    }
                    else if (faulted)
                    {
                        Debug.Log("Failed to load ID: " + mSelectedMapId);
                    }
                }
            );
        }

I am finding something like that too. We are currently using Placenote (https://placenote.com/). It’s not very bad, but it need to connect to the internet. It works but not very satisfying yet.

For beacon, yes! you need at least 3 beacon to do triangulation. But I don’t like beacon. I tried some ibeacons, but it’s quite easy to get influenced. You can change the signal strength by change another way to hold your phone.