Unity 路径绘制工具
描述
一个记录物体运动轨迹并使用LineRenderer进行绘制的简单脚本;
使用说明
- 将脚本挂在需要绘制路线的对象即可,每隔一段距离会记录一次移动。

脚本内容
此脚本用了Odin插件,没有的直接删除报错部分就行了
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
/// <summary>
/// 路径绘制和记录工具
/// </summary>
[RequireComponent(typeof(LineRenderer))]
public class PathDrawTool : MonoBehaviour
{
private LineRenderer _lineRenderer;
[Tooltip("记录间隔")] public float recordDistance = 1f;
[Tooltip("线条颜色")] public Color color = Color.red;
public List<Vector3> points = new List<Vector3>();
public List<float> timeSpan = new List<float>();
public float time;
private void OnValidate()
{
_lineRenderer = gameObject.GetComponent<LineRenderer>();
_lineRenderer.startColor = color;
_lineRenderer.endColor = color;
_lineRenderer.startWidth = 0.1f;
_lineRenderer.endWidth = 0.1f;
}
private void RecordPoint(Vector3 point)
{
points.Add(point);
timeSpan.Add(time);
}
private void Start()
{
RecordPoint(transform.position);
}
public void Update()
{
time += Time.deltaTime;
//记录物体运动轨迹,每隔一定距离记录一次
if (Vector3.Distance(transform.position, points[^1]) > recordDistance)
{
RecordPoint(transform.position);
UpdateLineRenderer();
}
}
[Button("清除轨迹")]
public void Clear()
{
timeSpan.Clear();
points.Clear();
time = 0;
RecordPoint(transform.position);
UpdateLineRenderer();
}
public void OnDrawGizmos()
{
Gizmos.color = color;
for (var i = 0; i < points.Count; i++)
{
if (i != points.Count - 1)
Gizmos.DrawLine(points[i], points[i + 1]);
}
}
private void UpdateLineRenderer()
{
_lineRenderer.positionCount = points.Count;
_lineRenderer.SetPositions(points.ToArray());
}
}
3394

被折叠的 条评论
为什么被折叠?



