- 最后登录
- 2021-7-6
- 注册时间
- 2012-12-27
- 阅读权限
- 90
- 积分
- 76145
 
- 纳金币
- 53488
- 精华
- 316
|
使用方法,把代码拖到一个gameobject,设置下代码里的tag,运行,然后在场景里拖就ok了
treeNum为树的索引- using UnityEngine;
- using System.Collections;
- public class TreePlanter : MonoBehaviour {
- public Terrain t;
- private TerrainData _tData;
- private float _width;
- private float _height;
- public float dis = 1f;
- private Vector3 _startPos;
- private Vector3 _endPos;
- public int treeNum = 0;
- // Use this for initialization
- void Start () {
- _tData = t.gameObject.GetComponent<TerrainCollider> ().terrainData;
- _width = _tData.size.x;
- _height = _tData.size.z;
- }
- public void AddTree(Vector3 pos)
- {
- Vector3 finPos;
- pos = t.transform.InverseTransformPoint(pos);
- finPos = new Vector3 (pos.x/_width,0f,pos.z/_height);
- TreeInstance tree = new TreeInstance();
- tree.position = finPos;//TreePlanter.Instance.start.transform.localPosition;
- tree.heightScale = 1;
- tree.widthScale = 1;
- tree.prototypeIndex = treeNum;
- tree.color = Color.white;
- tree.lightmapColor = Color.white;
- t.AddTreeInstance (tree);
- t.Flush ();
- }
-
- // Update is called once per frame
- void Update () {
- if (Input.GetMouseButtonDown (0)) {
- Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
- RaycastHit hit;
- Physics.Raycast (ray, out hit, 1000, 1 << LayerMask.NameToLayer ("Terr"));
- _startPos = hit.point;
- }
- if (Input.GetMouseButtonUp (0)) {
- Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
- RaycastHit hit;
- Physics.Raycast (ray, out hit, 1000, 1 << LayerMask.NameToLayer ("Terr"));
- if (hit.collider == null)
- return;
- _endPos = hit.point;
- CreatTreeLine ();
- }
- }
- public void CreatTreeLine()
- {
- Vector3 dir;
- Vector3 pos = _startPos;
- float seDis = Dis2 (_startPos, _endPos);
- dir = _endPos - _startPos;
- dir.Normalize ();
- do {
- AddTree(pos);
- pos+=dir*dis;
- } while (Dis2(_startPos,pos)<seDis);
- }
- public float Dis2(Vector3 a,Vector3 b)
- {
- return Mathf.Pow (a.x - b.x, 2f) + Mathf.Pow (a.z-b.z,2f);
- }
- }
复制代码 |
|