Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
        }
    }