1、 畫多條線
畫多條線需要在場景中放置多個GameObject,因為一個GameObject只能添加一個LineRenderer Component。
2、 線段樣式
線段的樣式由LineRenderer組件的材質控制
3、 坐標系
LineRenderer使用了2種坐標系:World和Location。在設置目標點的時候需要注意你使用的坐標系是哪一種。
Location:
transform.LookAt(rh.point); //GameObject始終面對目標點
lineRenderer = (LineRenderer)gameObject.GetComponent ("LineRenderer");
lineRenderer.useWorldSpace=false;
lineRenderer.SetWidth(0.1f,0.1f);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out rh))
{
lineRenderer.SetPosition(0, Vector3.forward*rh.distance);
//方向*距離,典型的Location坐標系用法
}
World:
void Start ()
{
gameObject.SetActive(false);
lr = gameObject.GetComponent(typeof(LineRenderer)) as LineRenderer;
lr.SetWidth(0.1f,0.1f);
}
// Update is called once per frame
void Update ()
{
if(Input.GetMouseButtonUp(0))
{
//Get click position
Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
lr.SetVertexCount(lineSeg+1);
if(Physics.Raycast(ray,out rh))
{
pointPos.Add(DrawLine(rh));
}
}
if(Input.GetMouseButtonUp(1))
{
//destroy point
DestroyLine();
}
}
GameObject DrawLine(RaycastHit pointPos)
{
//Display point
GameObject gb_pointer = GameObject.Instantiate(pointer) as GameObject;
gb_pointer.transform.position =pointPos.point + (transform.position - pointPos.point) * 0.01f;
gb_pointer.transform.rotation = Quaternion.LookRotation (pointPos.normal, Camera.mainCamera.transform.up);
Vector3 laserpos = new Vector3();
laserpos.x= 90.0f;
laserpos.y= gb_pointer.transform.position.y;
laserpos.z= gb_pointer.transform.position.z;
gb_pointer.transform.eulerAngles = laserpos;
lr.SetPosition(lineSeg,pointPos.point);
//設置目標點的坐標,使用的是world坐標系
lineSeg++;
return gb_pointer;
}
void DestroyLine()
{
int arrayLength = pointPos.Count;
if(arrayLength > 0)
{
GameObject.Destroy(pointPos[arrayLength-1]);
pointPos.RemoveAt(arrayLength-1);
lr.SetVertexCount(--lineSeg);
}
}