Unity3d LineRenderer画线

【狗刨学习网】

1、  画多条线

画多条线需要在场景中放置多个GameObject,因为一个GameObject只能添加一个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. // Update is called once per frame
  7. void Update () {
  8. if(Input.GetMouseButtonUp(0)){
  9. //Get click position
  10. Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
  11. lr.SetVertexCount(lineSeg+1);
  12. if(Physics.Raycast(ray,out rh)){
  13. pointPos.Add(DrawLine(rh));
  14. }
  15. }
  16. if(Input.GetMouseButtonUp(1)){
  17. //destroy point
  18. DestroyLine();
  19. }
  20. }
  21. GameObject DrawLine(RaycastHit pointPos){
  22. //Display point
  23. GameObject gb_pointer = GameObject.Instantiate(pointer) as GameObject;
  24. gb_pointer.transform.position =pointPos.point + (transform.position - pointPos.point) * 0.01f;
  25. gb_pointer.transform.rotation = Quaternion.LookRotation (pointPos.normal, Camera.mainCamera.transform.up);
  26. Vector3 laserpos = new Vector3();
  27. laserpos.x= 90.0f;
  28. laserpos.y= gb_pointer.transform.position.y;
  29. laserpos.z= gb_pointer.transform.position.z;
  30. gb_pointer.transform.eulerAngles = laserpos;
  31. lr.SetPosition(lineSeg,pointPos.point);   //设置目标点的坐标,使用的是world坐标系
  32. lineSeg++;
  33. return gb_pointer;
  34. }
  35. void DestroyLine(){
  36. int arrayLength = pointPos.Count;
  37. if(arrayLength > 0){
  38. GameObject.Destroy(pointPos[arrayLength-1]);
  39. pointPos.RemoveAt(arrayLength-1);
  40. lr.SetVertexCount(--lineSeg);
  41. }
  42. }

复制代码

声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。

更多精彩内容:www.gopedu.com

时间: 2024-10-01 06:07:09

Unity3d LineRenderer画线的相关文章

unity3d GL画线/物体跟随/坐标系转换

看见标题的人是不是在想... 一个小小的GL画线难吗? 一个小小的物体跟随难吗? 嗯,的确,一点不难.... 我一开始也是像你们那样想的,但是实际操作起来,还是和理论有区别的 写这个demo起因是这样的: 面试到了一家虚拟现实的公司,因为没有去公司 网上直接谈的,谈妥了hr估计是想看看我能不能胜任 给了我一张效果图,让我去实现画线的功能 咳咳,要求还是比较细致的,这里我们后面说 废话不多说,老规矩,先上效果图,然后直接进入主题 第一张是hr给我的图,第二张是我自己实现的 需求如下: 1.模型是旋

unity3d NavMeshAgent 寻路画线/画路径

今天在群里看见有个小伙在问Game视图寻路时怎么画线 正好前几天写了个寻路,而且自己也不知道具体怎么在寻路时画线,所以决定帮帮他,自己也好学习一下 在百度查了一下资料,直接搜寻路画路径.寻路画线...... 我可不是伸手党,我只是想看看别人是怎么实现的 结果什么都没有搜到!!那就直接搜unity3d 画线吧.....  果然很多资料!! Debug.DrawLine:使用这个函数只能在 screen 中看见画的线,在 game 中看不见 那我们要怎么在game中画线呢 百度给我答案:LineRe

unity3d 使用GL 方式画线

这个是画线部分 private Vector3[] linePoints; public int m_LineCount; public int m_PointUsed; public void RenderPath() { GL.Begin(GL.LINES); for (int i = 0; i < m_LineCount - 1; ++i) { GL.Vertex(GetPoint(i)); GL.Vertex(GetPoint(i + 1)); } GL.End(); } 但是这个画线部

图形学_画线算法(DDA、Bresenham)

1. DDA算法实现直线绘制(需先安装easyx,百度下载即可) 1 #include "easyx.h" 2 #include "math.h" 3 #include "windows.h" 4 #include "stdio.h" 5 #include "stdlib.h" 6 #include "conio.h" 7 #include "graphics.h"

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

转自:http://blog.csdn.net/zhibudefeng/article/details/8463268 [cpp] view plain copy // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { CGC

Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{    CGContextRef context = UIGraphicsGetCurrentContext();         /*NO.1画一条线     CGContex

[游戏学习25] MFC 橡皮筋画线效果

>_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h 1 #include<afxwin.h> 2 class CMyApp :public CWinApp 3 { 4 public: 5 virtual BOOL InitInstance(); 6 }; 7 class CMainWindow:public CFrameWnd 8 { 9 protected: 10 BOOL m_bTracking; //标志:鼠标按下为真,否则为假 11

Android 自定义View 画圆 画线

自定义一个DrawCircle继承View 实现构造方法: public DrawCircle(Context context) { super(context); this.mContext = context; } public DrawCircle(Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; } 重写onDraw方法: protected void onDraw

WPF画线问题,几千条以后就有明显的延迟了。

我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() {    _path.Data = _lines; } public Draw() {   LineGeometry line = new LineGeometry(p1, p2);   _lines.Children.Add(line); } }一开始的速度很好,但是线多了以后,就有明显的延迟了. 有什么更快速的方法不? 解决方案 ?