void RenderGestureTemplates()
    {
        gestureRenderers = new List <PointCloudGestureRenderer>();

        Transform gestureRoot = new GameObject("Gesture Templates").transform;

        gestureRoot.parent     = this.transform;
        gestureRoot.localScale = GestureScale * Vector3.one;

        PointCloudRegognizer recognizer = GetComponent <PointCloudRegognizer>();
        Vector3 pos           = Vector3.zero;
        int     gesturesOnRow = 0;
        int     rows          = 0;
        float   rowWidth      = 0;

        foreach (PointCloudGestureTemplate template in recognizer.Templates)
        {
            PointCloudGestureRenderer gestureRenderer = Instantiate(GestureRendererPrefab, gestureRoot.position, gestureRoot.rotation) as PointCloudGestureRenderer;
            gestureRenderer.GestureTemplate         = template;
            gestureRenderer.name                    = template.name;
            gestureRenderer.transform.parent        = gestureRoot;
            gestureRenderer.transform.localPosition = pos;
            gestureRenderer.transform.localScale    = Vector3.one;

            pos.x += GestureSpacing.x;

            rowWidth = Mathf.Max(rowWidth, pos.x);

            if (++gesturesOnRow >= MaxGesturesPerRaw)
            {
                pos.y        += GestureSpacing.y;
                pos.x         = 0;
                gesturesOnRow = 0;
                rows++;
            }

            gestureRenderers.Add(gestureRenderer);
        }

        // center
        Vector3 rootPos = Vector3.zero;

        rootPos.x -= GestureScale * 0.5f * (rowWidth - GestureSpacing.x);

        if (rows > 0)
        {
            rootPos.y -= GestureScale * 0.5f * (pos.y - GestureSpacing.y);
        }

        gestureRoot.localPosition = rootPos;
    }
    // Message send by the PointCloudRecognizer when it recognized a valid gesture pattern
    void OnCustomGesture(PointCloudGesture gesture)
    {
        string scorePercentText = (gesture.MatchScore * 100).ToString("N2");

        UI.StatusText = "Matched " + gesture.RecognizedTemplate.name + " (score: " + scorePercentText + "% distance:" + gesture.MatchDistance.ToString("N2") + ")";
        Debug.Log(UI.StatusText);

        // make the corresponding gesture visualizer blink
        PointCloudGestureRenderer gr = FindGestureRenderer(gesture.RecognizedTemplate);

        if (gr)
        {
            gr.Blink();
        }
    }