Unity3d LineRenderer畫線


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM