用 Unity 的 LineRenderer 实现一个画直线组件
程序员文章站
2022-03-27 17:04:30
最近需要在工程里实现一个*画直线的功能,上网查来查去,发现用 Unity 画线有各式各样的方案,最后锚定了这个LineRenderer,打算用它来做一个画线 Prefab,另外加载一个自己写的脚本,方便未来*定制。 创建一个 Empty 节点,我给它起名叫 DrawLine2D 。 这里要注意Materials的材质要选Sprites-Default 。 接下来给这个节点挂一个脚本,我起名叫DrawLine2DController 。代码如下:using Sys......
最近需要在工程里实现一个*画直线的功能,上网查来查去,发现用 Unity 画线有各式各样的方案,最后锚定了这个LineRenderer,打算用它来做一个画线 Prefab,另外加载一个自己写的脚本,方便未来*定制。
创建一个 Empty 节点,我给它起名叫 DrawLine2D 。
这里要注意Materials的材质要选Sprites-Default 。
接下来给这个节点挂一个脚本,我起名叫 DrawLine2DController 。
代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine2DController : MonoBehaviour {
private LineRenderer lineRenderer;
public Color startColor;
public Color endColor;
public float startWidth;
public float endWidth;
public Vector3 startPosition;
public Vector3 endPosition;
void Start() {
lineRenderer = GetComponent<LineRenderer>();
lineRenderer.startColor = startColor;
lineRenderer.endColor = endColor;
lineRenderer.startWidth = startWidth;
lineRenderer.endWidth = endWidth;
int lengthY = (int)Math.Abs(endPosition.y-startPosition.y);
int lengthX = (int)Math.Abs(endPosition.x-startPosition.x);
float zPosition = Math.Max(startPosition.z, endPosition.z);
Vector3 bottomPosition = startPosition.y < endPosition.y ? startPosition : endPosition;
Vector3 leftPosition = startPosition.x < endPosition.x ? startPosition : endPosition;
if (lengthY > lengthX && lengthY >= 1f) {
lineRenderer.positionCount = lengthY;
for (int i = 0; i < lengthY; ++i) {
float xOffset = i * lengthX/lengthY;
lineRenderer.SetPosition(i, new Vector3(leftPosition.x+xOffset, bottomPosition.y+(float)i, zPosition));
}
} else if (lengthX >= 1f) {
lineRenderer.positionCount = lengthX;
for (int i = 0; i < lengthX; ++i) {
float yOffset = i * lengthX/lengthY;
lineRenderer.SetPosition(i, new Vector3(leftPosition.x+(float)i, bottomPosition.y+yOffset, zPosition));
}
}
}
}
这段代码实现了基本按像素点(1为单元,其实可以自己调节精度)的画直线绘制操作。
挂载后把这个对象以Prefab形式保存了,暴露的脚本public属性可以用来设置画线用的颜色和粗细度。以后还可以扩展画曲线。
本文地址:https://blog.csdn.net/madaxin/article/details/107865867