您现在的位置是:首页 >技术教程 >UnityVR--组件3--Line Renderer--线性渲染网站首页技术教程

UnityVR--组件3--Line Renderer--线性渲染

唐小墨同学 2024-06-17 11:28:16
简介UnityVR--组件3--Line Renderer--线性渲染

目录

前言

Line Renderer组件介绍

Trail Renderer组件介绍

 使用Line Renderer绘制线段

使用系统工具或自定义工具绘制线段

Trail Renderer简单制作子弹拖尾效果


前言

  Line Renderer线性渲染组件用于在3D中渲染线段,如之前在小游戏中做过的激光门伤害,以及VR手柄上用到了Line Renderer。

  Trail Renderer拖尾渲染器也是用于渲染线段,用于给物体增加一个体现高速运动拖尾特效。

  本篇主要记录使用Line Renderer、Trail Renderer组件和API,使用它们绘制线段的方法,并且自建一个工具集合存储这些实用工具,以便在后续开发中随时使用。

Line Renderer组件介绍

  Line Renderer是一个用顶点去控制渲染尺寸和位置的线条,其中顶点的个数和坐标也是可以控制的。官方的Line Renderer组件介绍可以看Line Renderer component - Unity 手册 (unity3d.com)

  其中,较常用的选项有width、Materials等,其他的设置一般都使用脚本控制。

  width控制线条的宽度,可以设置多个节点让线条各处不等宽。

    

   Materials控制线条材质,不加则只会显示粉色。当然这项也能在脚本中更改。

  

   Line Renderer常用的API有:

  positionCount:设置线段的点的数量;

  SetPosition(int index, Vector3[] position):添加点的位置(点的下标,点的位置);

  startWidth,endWidth:起点和终点的宽度;

  material.Color:射线材质颜色

Trail Renderer组件介绍

  Trail Renderer组件与Line Renderer组件非常类似,是可以挂在在某个物体上,让它产生拖尾的效果。一般宽度可以设置为前面宽,后面窄,更加有高速的感觉:

  

   其他的设置可以参照官方文档:Trail Renderer component - Unity 手册 (unity3d.com),且可以在脚本中使用API方法来设定。拖尾的效果如下图显示:

 使用Line Renderer绘制线段

  建立一个工具包Tools.cs,设置为静态Statics类,代码如下:

//静态工具类
public static class Tools
{
    //使用LineRenderer绘制线段,方法1(新建线段)
    public static LineRenderer DrawLine(Transform transform, Vector3 start, Vector3 end, Color color = default(Color),
        float width = 0.1f)
    {//DrawLine(设置父物体,线段起点,终点,颜色,宽度)
        GameObject gameObject = new GameObject();  //在场内新建一个物体
        gameObject.transform.SetParent(transform); //把这个物体方在父物体下面
        gameObject.name = "Line";                  //给物体命名
        LineRenderer line = gameObject.AddComponent<LineRenderer>();  //挂上LineRenderer组件
        line.useWorldSpace = true;  //线段设置为世界坐标
        line.material = Resload.Instance.LoadAsset<Material>("line");  //从Resource下加载名为line的材质
        line.SetVertexCount(2);  //设置顶点数量,2个,起点、终点
        line.SetWidth(width, width);  //设置第一个顶点的宽度、第二个顶点宽度
        line.material.SetColor("_Color", color);   //这个颜色是材质的颜色,是Material类中的一个属性
                                                   //这里修改的是Resource文件夹下line材质的颜色属性
        line.startColor = color;  //设置开始颜色和结束颜色
        line.endColor = color;    //可以有一个渐变的效果,当然也可以一致
        line.SetPosition(0, start);//设置起点和终点的位置
        line.SetPosition(1, end);
        return line;
    }

    //使用LineRenderer绘制线段,方法2(对已有线段修改)
    public static LineRenderer DrawLine(Transform transform, LineRenderer line,Vector3 start,Vector3 end, Color color=default(Color), float width = 0.1f)
    {//DrawLine(设置父物体,提供一个线段供修改,线段起点,终点,颜色,宽度)
        if(line==null)
        {//先判断是否已有一个线段,如果没有,则用方法2新建一个
            return DrawLine(transform,start, end, color,width);
        }
        //如果线段已存在,就按照下面的设置修改线段属性,与方法1设置方法相同
        line.useWorldSpace = false;  
        line.SetVertexCount(2);  
        line.SetWidth(width, width);  
        line.material.SetColor("_Color", color);  
        line.startColor = color;  
        line.endColor = color;    
        line.SetPosition(0, start);
        line.SetPosition(1, end);
        return line;
    }

}

  这里设置了2各绘制线段的方法,第一个方法是新建一个线段,包括在场内新建对象和挂载 Line Renderer组件,第二个方法是对已经挂载 Line Renderer组件的对象进行修改。如果有需要设置更复杂的线段,还可以定义得更加详细一些。

使用系统工具或自定义工具绘制线段

  在场内新建一个空节点line,并挂载一个脚本line.cs(名字随意)。不过这个line节点的位置会对之后绘制的线段有影响,因为线段是作为它的子节点的。line.cs的脚本只要在Start()中如下

void Start()
    {
        //使用Unity自带的Debug划线工具
        Debug.DrawLine(transform.position,transform.position+transform.forward*10,Color.green,100);
        Debug.DrawRay(transform.position, transform.forward, Color.red, 100);

        //使用Tools工具集划线段
        Tools.DrawLine(transform, transform.position, transform.position + transform.forward * 10, Color.blue, 0.1f);        
    }

  这里先尝试使用Unity自带的划线工具Debug.DrawLine。它的定义如下,传的参数比较少。

public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration){}

  * 注: 使用静态(static)类、静态方法、静态变量时,只有在调取类时才能调用到它(Tools.DrawLine()),而不是new对象后,通过“对象.方法”来调用了。

  运行结果如下:

Trail Renderer简单制作子弹拖尾效果

  之前做过的子弹预制体上,直接AddComponent,加上Trail Renderer组件,根据需要简单设置一下颜色、宽度、阴影等参数,达到如下效果:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。