public async void Raycast(Vector3 origin, Vector3 direction)
    {
        var remoteEntity = await RemoteRayCast(origin, direction);

        if (focusedModel != null)
        {
            if (focusedModel.Entity == remoteEntity)
            {
                // picked the same object as before
                return;
            }

            ClearFocus();
        }

        if (remoteEntity == null)
        {
            // picked no object at all
            return;
        }

        // get the instance of a Unity GameObject for the ARR entity
        var entityGO = remoteEntity.GetOrCreateGameObject(UnityCreationMode.DoNotCreateUnityComponents);

        // ensure the game object has the RemoteModelEntity component
        focusedModel = entityGO.GetComponent <RemoteModelEntity>();
        if (focusedModel == null)
        {
            focusedModel = entityGO.AddComponent <RemoteModelEntity>();
        }

        focusedModel.SetFocus(true);
    }
 private void ClearFocus()
 {
     focusedModel.SetFocus(false);
     CleanHierarchy(focusedModel.gameObject);
     focusedModel = null;
 }