void GenerateLinks(NavLinkGenerator gen)
        {
            var tri       = NavMesh.CalculateTriangulation();
            var edge_list = CreateEdges(tri);

            foreach (var edge in edge_list)
            {
                edge.ComputeDerivedData();
            }
            if (edge_list.Count() == 0)
            {
                return;
            }

            RemoveLinks();
            m_CreatedLinks.Clear();
            var parent = NavEdUtil.GetNamedRoot(k_LinkRootName);

            foreach (var edge in edge_list)
            {
                var mid  = edge.GetMidpoint();
                var fwd  = edge.m_Normal;
                var link = CreateNavLink(parent, gen, edge, mid, fwd);
                if (link != null)
                {
                    m_CreatedLinks.Add(link);
                }
            }
        }
        void RemoveLinks()
        {
            var nav_links = NavEdUtil.GetNamedRoot(k_LinkRootName).GetComponentsInChildren <NavMeshLink>();

            foreach (var link in nav_links)
            {
                GameObject.DestroyImmediate(link.gameObject);
            }
        }
        static NavNonWalkableCollection Get()
        {
            var root = NavEdUtil.GetNamedRoot(k_NoMeshVolumeRootName);

            if (root == null)
            {
                root = new GameObject(k_NoMeshVolumeRootName).transform;
            }
            var collection = root.GetComponent <NavNonWalkableCollection>();

            if (collection == null)
            {
                collection = root.gameObject.AddComponent <NavNonWalkableCollection>();
            }
            return(collection);
        }