protected GameObject CreateLODFromMesh(GameObject target, int LOD_Level) { GameObject goToInstantiate = null; GameObject go = null; if (target.GetComponent <GeneratedBranch>()) { go = target.GetComponent <GeneratedBranch>().CreateLODObject(target, transform, LOD_Level, target.GetComponent <MeshFilter>().mesh); go.transform.position = target.transform.position; go.transform.localScale = target.transform.localScale; go.GetComponent <GeneratedMesh>().VerySlowlyConvertToFlatShading(); generatedBranchLOD = go.GetComponent <GeneratedBranch>(); return(go); } if (target.GetComponent <GeneratedCone>()) { go = target.GetComponent <GeneratedCone>().CreateLODObject(target, transform, LOD_Level, target.GetComponent <MeshFilter>().mesh); go.transform.position = target.transform.position; go.transform.localScale = target.transform.localScale; go.GetComponent <GeneratedMesh>().VerySlowlyConvertToFlatShading(); return(go); } /* if (target.GetComponent<GeneratedBranch>()) * { * goToInstantiate = VegetationGenerator.instance.generatedBranchPrefab.gameObject; * } * else */if (target.GetComponent <GeneratedLeaves>()) { goToInstantiate = VegetationGenerator.instance.generatedLeavesPrefab.gameObject; } else { Debug.LogError("There is no implementation for creating LOD from this object!", target); } go = Instantiate(goToInstantiate.gameObject, transform); go.name = "LOD_Test"; if (target.GetComponent <GeneratedLeaves>()) { go.transform.position = target.transform.position; go.transform.localScale = target.transform.localScale; go.GetComponent <MeshFilter>().mesh = target.GetComponent <MeshFilter>().mesh; go.GetComponent <GeneratedLeaves>().Generate(LOD_Level); generatedLeavesLOD = go.GetComponent <GeneratedLeaves>(); } go.GetComponent <GeneratedMesh>().VerySlowlyConvertToFlatShading(); return(go); }
private void GenerateFood() { int count = 5; GeneratedLeaves[] food = new GeneratedLeaves[count]; for (int i = 0; i < count; i++) { food[i] = Instantiate(VegetationGenerator.instance.generatedBushFoodPrefab, generatedLeaves.transform); food[i].transform.localPosition = generatedLeaves.GetComponent <MeshFilter>().mesh.vertices[Random.Range(0, generatedLeaves.GetComponent <MeshFilter>().mesh.vertexCount - 1)]; food[i].Generate(0); food[i].transform.localScale = new Vector3(0.15f, 0.15f, 0.15f); food[i].VerySlowlyConvertToFlatShading(); } //Merge food objects to one mesh count = food.Length; MeshFilter[] meshFilters = new MeshFilter[count]; for (int i = 0; i < count; i++) { meshFilters[i] = food[i].GetComponent <MeshFilter>(); } foodObject = GeneratedMesh.CombineMeshes(generatedLeaves.transform, meshFilters); }
protected IEnumerator MergeChildTrees(float LOD0_Distance, float LOD1_Distance) { yield return(new WaitForEndOfFrame()); List <Tree> treesToMerge = new List <Tree>(); if (transform.parent && !transform.parent.GetComponent <Tree>()) { treesToMerge.Add(this); for (int i = 0; i < transform.childCount; i++) { if (transform.GetChild(i).GetComponent <Tree>()) { treesToMerge.Add(transform.GetChild(i).GetComponent <Tree>()); } } //Merge int count = treesToMerge.Count; if (count > 0) { List <MeshFilter> meshFiltersBranches = new List <MeshFilter>(); List <MeshFilter> meshFiltersLeaves = new List <MeshFilter>(); List <MeshFilter> meshFiltersBranchesLOD = new List <MeshFilter>(); List <MeshFilter> meshFiltersLeavesLOD = new List <MeshFilter>(); for (int i = 0; i < count; i++) { meshFiltersBranches.Add(treesToMerge[i].generatedBranch.GetComponent <MeshFilter>()); meshFiltersBranches.AddRange(treesToMerge[i].generatedBranchesParent.GetComponentsInChildren <MeshFilter>()); meshFiltersLeaves.Add(treesToMerge[i].generatedLeaves.GetComponent <MeshFilter>()); meshFiltersBranchesLOD.Add(treesToMerge[i].generatedBranchLOD.GetComponent <MeshFilter>()); meshFiltersLeavesLOD.Add(treesToMerge[i].generatedLeavesLOD.GetComponent <MeshFilter>()); } GameObject mergedBranches = GeneratedMesh.CombineMeshes(transform, meshFiltersBranches.ToArray()); mergedBranches.AddComponent <GeneratedBranch>(); mergedBranches.name = "Newly merged branches"; generatedBranch = mergedBranches.GetComponent <GeneratedBranch>(); GameObject mergedLeaves = GeneratedMesh.CombineMeshes(transform, meshFiltersLeaves.ToArray()); mergedLeaves.AddComponent <GeneratedLeaves>(); mergedLeaves.name = "Newly merged leaves"; generatedLeaves = mergedLeaves.GetComponent <GeneratedLeaves>(); //LOD GameObject mergedBranchesLOD = GeneratedMesh.CombineMeshes(transform, meshFiltersBranchesLOD.ToArray()); mergedBranchesLOD.AddComponent <GeneratedBranch>(); mergedBranchesLOD.name = "Newly merged branches LOD"; generatedBranchLOD = mergedBranchesLOD.GetComponent <GeneratedBranch>(); GameObject mergedLeavesLOD = GeneratedMesh.CombineMeshes(transform, meshFiltersLeavesLOD.ToArray()); mergedLeavesLOD.AddComponent <GeneratedLeaves>(); mergedLeavesLOD.name = "Newly merged leaves LOD"; generatedLeavesLOD = mergedLeavesLOD.GetComponent <GeneratedLeaves>(); } AddLODsNew(LOD0_Distance, LOD1_Distance); } }