private void Awake()
    {
        if (_instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);
        FritzPoseManager.Configure();
        bird.SendMessage("SetController", birdController);

        birdController.SendMessage("AllPause");
    }
    private void Update()
    {
        if (FritzPoseManager.Processing())
        {
            return;
        }

#if UNITY_ANDROID && !UNITY_EDITOR
        XRCameraImage image;
        if (!m_CameraManager.TryGetLatestImage(out image))
        {
            image.Dispose();
            return;
        }

        FritzPoseManager.ProcessPoseFromImageAsync(image);

        // You must dispose the CameraImage to avoid resource leaks.
        image.Dispose();
#elif UNITY_IOS && !UNITY_EDITOR
        var cameraParams = new XRCameraParams
        {
            zNear             = m_Cam.nearClipPlane,
            zFar              = m_Cam.farClipPlane,
            screenWidth       = Screen.width,
            screenHeight      = Screen.height,
            screenOrientation = Screen.orientation
        };

        XRCameraFrame frame;
        if (!m_CameraManager.subsystem.TryGetLatestFrame(cameraParams, out frame))
        {
            return;
        }
        FritzPoseManager.ProcessPoseFromFrameAsync(frame);
#else
        var randomPosition = debugPoint;
        randomPosition.x = randomPosition.x * UnityEngine.Random.Range(-0.5f, 0.5f);
        randomPosition.y = randomPosition.y * UnityEngine.Random.Range(-0.5f, 0.5f);

        Debug.LogFormat("{0}", bird);
        MoveBirdToPoint(bird, randomPosition);
        if (trackedObject != null)
        {
            trackedObject.transform.position = randomPosition;
        }
#endif
    }
    public void UpdatePose(string message)
    {
        var poses = FritzPoseManager.ProcessEncodedPoses(message);

        foreach (FritzPose pose in poses)
        {
            FritzHumanTrackable trackable = humanTrackableManager.CreateOrUpdateTrackable(0, pose);
            var estimatedShoulder         = trackable.GetEstimatedPosition(FritzPoseParts.LeftShoulder);
            if (estimatedShoulder.HasValue)
            {
                MoveBirdToPoint(bird, estimatedShoulder.Value);
                if (trackedObject != null)
                {
                    trackedObject.transform.position = estimatedShoulder.Value;
                }
            }
            // Only handling one pose for right now.
            break;
        }
    }