public static void BuildTerrainTree(MenuCommand menuCommand)
        {
            GameObject[] SelectObjects = Selection.gameObjects;
            foreach (GameObject SelectObject in SelectObjects)
            {
                Terrain terrain = SelectObject.GetComponent <Terrain>();
                if (!terrain)
                {
                    Debug.LogWarning("select GameObject doesn't have terrain component");
                    continue;
                }

                TerrainData   terrainData   = terrain.terrainData;
                TreeComponent treeComponent = SelectObject.GetComponent <TreeComponent>();
                if (treeComponent == null)
                {
                    treeComponent = SelectObject.AddComponent <TreeComponent>();
                }
                treeComponent.terrain     = terrain;
                treeComponent.terrainData = terrainData;
                treeComponent.OnSave();
                treeComponent.treeSectors = new FTreeSector[terrainData.treePrototypes.Length];

                for (int index = 0; index < terrainData.treePrototypes.Length; ++index)
                {
                    treeComponent.treeSectors[index]           = new FTreeSector();
                    treeComponent.treeSectors[index].treeIndex = index;

                    TreePrototype   treePrototype = terrainData.treePrototypes[index];
                    List <Mesh>     meshes        = new List <Mesh>();
                    List <Material> materials     = new List <Material>();

                    GameObject treePrefab = treePrototype.prefab;
                    LODGroup   lodGroup   = treePrefab.GetComponent <LODGroup>();
                    LOD[]      lods       = lodGroup.GetLODs();

                    //Collector Meshes&Materials
                    for (int j = 0; j < lods.Length; ++j)
                    {
                        ref LOD    lod        = ref lods[j];
                        Renderer   renderer   = lod.renderers[0];
                        MeshFilter meshFilter = renderer.gameObject.GetComponent <MeshFilter>();

                        meshes.AddUnique(meshFilter.sharedMesh);
                        for (int k = 0; k < renderer.sharedMaterials.Length; ++k)
                        {
                            materials.AddUnique(renderer.sharedMaterials[k]);
                        }
                    }

                    //Build LODInfo
                    FMeshLODInfo[] lodInfos = new FMeshLODInfo[lods.Length];
                    for (int l = 0; l < lods.Length; ++l)
                    {
                        ref LOD          lod      = ref lods[l];
                        ref FMeshLODInfo lodInfo  = ref lodInfos[l];
                        Renderer         renderer = lod.renderers[0];

                        lodInfo.screenSize   = 1 - (l * 0.03125f);
                        lodInfo.materialSlot = new int[renderer.sharedMaterials.Length];

                        for (int m = 0; m < renderer.sharedMaterials.Length; ++m)
                        {
                            ref int materialSlot = ref lodInfo.materialSlot[m];
                            materialSlot = materials.IndexOf(renderer.sharedMaterials[m]);
                        }