LineRenderer——画线功能

1、LineRenderer

LineRenderer是Unity提供的一个用于画线的组件,使用它可以在场景中绘制线段,一般可以用于

  • 绘制攻击范围
  • 武器红外线
  • 辅助功能
  • 其他画线功能

一个物体只能绑定一个LineRenderer组件

2、LineRenderer参数相关

Loop 是否起点起始始终相连
Positions

线段的点坐标(一般是世界坐标系,通过Use World Space调整),通过增加点的数量与代码控制可以画圆 &

线段宽度调整(并非点与点的宽度调整,而是从开始到结尾)

Color 颜色变化,可以改变颜色的渐变效果

Corner Vertices

(角顶点,圆角)

在一条线中绘制角时(即线段转弯时)使用了多少额外的点,增加此值,可以使线角看起来更平滑

End Cap Vertices

(终端顶点,圆角)

调整终点圆角

Alignment
                                

对齐方式 View:视点,线段对着摄像机
Transform Z:线段面向其Z轴

Texture Mode
                
        

纹理模式,根据材质使用 Stretch:拉伸,沿整条线映射纹理一次
Tile:平铺,不停的重复纹理
Distribute Per Segment:分配执行
Repeat Per Segment:重复显示
Shadow Bias 阴影偏移
Generate Lighting Data 生成光源数据(材质如果会受到光源影响,需要打开才能正常显示)
Use World Space 是否使用世界坐标系
Materials 线使用的材质球
Lighting

关照影响

Cast Shodows:是否开启阴影

Receive Shadows:接收
Probes 光照探针

Light Probes:光探测器模式

  • off:不使用光探针
  • Blend Probes:使用内插光探针
  • Use Proxy Volume:使用三维网格内插光探针
  • Custom Provided:自定义从材质决定

Reflection Probes:反射探测器模式

和Use Probes几乎一样,除了两个:

  • Blend Probes And Skybox:使用混合反射探针并且和天空盒混合
  • Simple:启用普通探针,重叠式不混合

Additional Settings

附加设置

Motion Vectors:运动矢量

  • Camera Motion Only:使用相机运动来跟踪运动
  • Per Object Motion:对特定对象来跟踪运动
  • Force No Motion:不跟踪

Dynamic Occlude:动态遮挡剔除

Sorting Layer:排序图册
Order in Layer:线段在排序图层中的顺序

3、LineRenderer代码相关

// 动态添加一个线段
GameObject line = new GameObject();
line.name = "Line";
LineRenderer lineRenderer = line.AddComponent();

// 首位相连
lineRenderer.loop = true;

// 开始结束的宽
lineRenderer.startWidth = 0.03f;
lineRenderer.endWidth = 0.02f;

// 开始结束的颜色
lineRenderer.startColor = Color.white;
lineRenderer.endColor = Color.red;

// 设置材质
lineRenderer.material = Resources.Load("material");

// 设置点,一定要设置点的个数,然后设置点的位置
// 同时设定了点的数量后,如果少于已有点的数量,会将多余的点删掉
lineRenderer.positionCount = 4;
// 通过数组批量设置
lineRenderer.SetPositions(new Vector3[] {new Vector3(0, 0, 0),
                                         new Vector3(0, 0, 5),
                                         new Vector3(5, 0, 5)};
// 注意,如果设置的点的数量与插入点位置的数量不一致,那么最后会补齐一个坐标为(0,0,0)的点
// 通过索引设定第(index+1)个点的坐标
lineRenderer.SetPostion(3, new Vector3(5, 0, 0));

// 是否使用世界坐标系,决定了是否随对象而移动
lineRenderer.useWorldSpace = false;

// 让线段会受光的影响,进行着色器计算
lineRenderer.generateLightingData = true
  •  如果要画一个圆:

public void DrawCircle(Vector3 centerPos, float r, int pointNum) {
    GameObject obj = new GameObject();
    obj.name = "circle";
    LineRenderer line = obj.AddCompoent();
    line.loop = true;
    line.positionCount = pointNum;

    float angle = 350f / pointNum;
    for(int i = 0; i < pointNum; ++i) {
        // 1、点+向量 => 平移点
        // 2、 四元数* 向量 => 旋转向量
        line.SetPosition(i, centerPos + Quaternion.AngleAxis(angle * i, Vector3.up) * Vector3.forward * r)
    }
}
  • 长按鼠标得到鼠标移动的轨迹

  • private Vectore3 nowPos;
    
    private void Update() {
        if (Input.GetMouseButtonDown(0)) {
            GameObject obj = new GameObject();
            obj.name = "trace";
            LineRenderer line = obj.AddCompoent();
            line.positionCount = 0;
            line.loop = false;
            line.starWidth = 0.5f;
            line.endWidth = 0.5f;
        }
    
        if (Input.GetMousePosition(0)) {
            line.positionCount += 1;
    
            nowPos = Input.mousePosition;
            nowPos.z = 10;        // 设定屏幕的横截面,即画线的平面
    
            Camera.main.ScreenToWorldPoint(Input.nowPos);
    
            line.sSetPostion(line.positionCount - 1, 
        }
    }

你可能感兴趣的:(Unity学习,#,Unity基础,unity)