示例#1
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="terrainData"></param>
    private void ApplyTrees(TerrainData terrainData)
    {
        if (Setting.Trees.Count > 0)
        {
            int maxCounts = 5;
            int treeIndex = Random.Range(0, Setting.Trees.Count - 1);
            for (int i = 0; i < ChopPoint.Count; i++)
            {
                Vector3 treePoint = ChopPoint[i];

                for (int j = 0; j < maxCounts; j++)
                {
                    Vector3 random = new Vector3(Random.Range(treePoint.x - 0.1f, treePoint.x + 0.1f),
                                                 -0.1f, Random.Range(treePoint.y - 0.1f, treePoint.y + 0.1f));

                    Vector3 position = Vector3.Scale(random, TerrainChunk.terrainData.size) + TerrainChunk.transform.position;
                    position.y = TerrainChunk.SampleHeight(position);

                    GameObject tree = GameObject.Instantiate(Setting.Trees[treeIndex]);
                    tree.transform.position = position;
                    tree.transform.parent   = TerrainChunk.transform;
                }
            }


            List <TreePrototype> trees = new List <TreePrototype>();
            for (int i = 0; i < Setting.Trees.Count; i++)
            {
                TreePrototype tree = new TreePrototype();
                tree.prefab = Setting.Trees[i];

                trees.Add(tree);
            }

            terrainData.treePrototypes = trees.ToArray();

            for (int i = 0; i < TreePoint.Count; i++)
            {
                Vector3 vpos = TreePoint[i];

                for (int j = 0; j < 10; j++)
                {
                    TreeInstance tmpTreeInstances = new TreeInstance();
                    tmpTreeInstances.prototypeIndex = 3;
                    tmpTreeInstances.position       = new Vector3(Random.Range(vpos.x - 0.1f, vpos.x + 0.1f), -0.1f, Random.Range(vpos.y - 0.1f, vpos.y + 0.1f));
                    tmpTreeInstances.color          = new Color(1, 1, 1, 1);
                    tmpTreeInstances.lightmapColor  = new Color(1, 1, 1, 1);

                    float scale = Random.Range(0.8f, 1f);
                    tmpTreeInstances.heightScale = scale;
                    tmpTreeInstances.widthScale  = scale;
                    TerrainChunk.AddTreeInstance(tmpTreeInstances);
                }
            }

            TerrainCollider tc = TerrainChunk.GetComponent <TerrainCollider>();
            tc.enabled = false;
            tc.enabled = true;
        }
    }