LineRender参数说明
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;
}
}
应用场景:鼠标绘制涂鸦
演示效果:
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)));
}
}
评论区