/// <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; } }