LineRender参数说明

划线组件

说明

Loop

是否循环,是指第一个点和最后一个点是否形成闭环

Positions

多个点,划线的点集

Corner Vertices

折点的弯曲度,值越大,折点越圆滑

LineRender代码相关

using Unity.VisualScripting;
using UnityEngine;

public class LineDemo : MonoBehaviour
{
    private void Start()
    {
        DrawLine();
    }

    public void DrawLine()
    {
        // 添加一个线段
        LineRenderer lr = this.AddComponent<LineRenderer>();

        // 设置首尾相连
        lr.loop = true;

        // 开始结束宽
        lr.startWidth = 0.02f;
        lr.endWidth = 0.02f;

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

        // 设置材质
        lr.material = Resources.Load<Material>("LineMaterial");


        //设置点
        //一定注意 设置点 要 先设置点的个数
        lr.positionCount = 4;
        lr.SetPositions(new Vector3[] {
                new Vector3(0,0,0),
                new Vector3(1,0,0),
                new Vector3(1,0,1),
                new Vector3(0,0,0)
         });

        lr.SetPosition(3, new Vector3(1, 1, 1));

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

        // 让线段受到光的影响,会接收光的数据,进行着色器计算
        lr.generateLightingData = true; 

        // 关闭阴影
        lr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;



    }
}

应用场景:用划线组件画一个圆

/// <summary>
/// LineDemo1 - 画一个圆
/// 
/// 作者: DY
/// 创建日期: 2025-01-01
/// 版本: 1.0
/// 
/// 详细描述: 功能描述
/// </summary>
public class LineDemo1 : MonoBehaviour
{
    public int radius = 10;
    public int segments = 10;

    LineRenderer lineRenderer = null;

    private void Start()
    {
        lineRenderer = this.AddComponent<LineRenderer>();
        DrawCircle();
    }

    public void DrawCircle()
    {
        if (lineRenderer == null)  throw new Exception("lineRenderer为空");
        lineRenderer.material = Resources.Load<Material>("LineMaterial");
        lineRenderer.positionCount = segments;
        Vector3 dir = transform.right * radius;
        for(int i = 0; i < segments; i++)
        {
            Vector3 newPos = Quaternion.Euler(0,360/segments * i, 0) * dir;
            lineRenderer.SetPosition(i, newPos);
        }
        lineRenderer.loop = true;
    }

}

应用场景:鼠标绘制涂鸦

演示效果:

drwaLine

using UnityEngine;

/// <summary>
/// LineDemo2 - 鼠标绘制涂鸦
/// 
/// 作者: DY
/// 创建日期: 2025-01-01
/// 版本: 1.0
/// 
/// 详细描述: 功能描述
/// </summary>
public class LineDemo2 : MonoBehaviour
{
    private bool desiredDraw;
    private LineRenderer lr = null;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject go = new GameObject();
            lr = go.AddComponent<LineRenderer>();
            lr.material = Resources.Load<Material>("LineMaterial");
            lr.startWidth = 0.02f;
            lr.endWidth = 0.02f;
            lr.positionCount = 0;
            desiredDraw = true;
        }else if (Input.GetMouseButtonUp(0))
        {
            desiredDraw = false;
        }
        if(desiredDraw)
        {
            Draw();
        }
    }

    private void Draw()
    {
        lr.positionCount++;
        lr.SetPosition(lr.positionCount-1, Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1)));
    }
}