程序员人生 网站导航

Unity3d LineRenderer画线

栏目:综合技术时间:2015-03-09 08:26:52
【狗刨学习网】

1、  画多条线
画多条线需要在场景中放置多个GameObject,由于1个GameObject只能添加1个LineRenderer Component。

2、  线段样式
线段的样式由LineRenderer组件的材质控制

3、  坐标系
LineRenderer使用了2种坐标系:World和Location。在设置目标点的时候需要注意你使用的坐标系是哪种。

Location:
  1. transform.LookAt(rh.point);  //GameObject始终面对目标点
  2. lineRenderer = (LineRenderer)gameObject.GetComponent ("LineRenderer");     
  3.        lineRenderer.useWorldSpace=false;
  4.        lineRenderer.SetWidth(0.1f,0.1f);
  5. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  6.             if(Physics.Raycast(ray,out rh)){
  7. lineRenderer.SetPosition(0, Vector3.forward*rh.distance);//方向*距离,典型的Location坐标系用法
  8. }
复制代码
World:
  1. void Start () {
  2.         gameObject.SetActive(false);
  3.         lr = gameObject.GetComponent(typeof(LineRenderer)) as LineRenderer;            
  4.         lr.SetWidth(0.1f,0.1f);
  5.     }
  6.     
  7.     // Update is called once per frame
  8.     void Update () {    
  9.         if(Input.GetMouseButtonUp(0)){
  10.             
  11.             //Get click position
  12.             Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
  13.             lr.SetVertexCount(lineSeg+1);
  14.             if(Physics.Raycast(ray,out rh)){                
  15.                 pointPos.Add(DrawLine(rh));
  16.             }            
  17.         }
  18.         
  19.         if(Input.GetMouseButtonUp(1)){
  20.             //destroy point
  21.             DestroyLine();
  22.         }
  23.         
  24.         
  25.     }
  26.     
  27.     
  28.     GameObject DrawLine(RaycastHit pointPos){

  29.                 //Display point
  30.                 GameObject gb_pointer = GameObject.Instantiate(pointer) as GameObject;
  31.                 gb_pointer.transform.position =pointPos.point + (transform.position - pointPos.point) * 0.01f; 
  32.                 gb_pointer.transform.rotation = Quaternion.LookRotation (pointPos.normal, Camera.mainCamera.transform.up);
  33.                 Vector3 laserpos = new Vector3();
  34.                 laserpos.x= 90.0f;
  35.                 laserpos.y= gb_pointer.transform.position.y;
  36.                 laserpos.z= gb_pointer.transform.position.z;
  37.                 gb_pointer.transform.eulerAngles = laserpos;
  38.                 lr.SetPosition(lineSeg,pointPos.point);   //设置目标点的坐标,使用的是world坐标系
  39.                 lineSeg++;
  40.                 return gb_pointer;
  41.     }
  42.     
  43.     void DestroyLine(){
  44.     
  45.         int arrayLength = pointPos.Count;
  46.         if(arrayLength > 0){
  47.             GameObject.Destroy(pointPos[arrayLength⑴]);
  48.             pointPos.RemoveAt(arrayLength⑴);        
  49.             lr.SetVertexCount(--lineSeg);
  50.         }
  51.     }
复制代码
声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有甚么内容侵犯了你的相干权益,请与官方沟通,我们会即时处理。


更多精彩内容:www.gopedu.com
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐