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]); }