Unity 路径绘制工具

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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又来077

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值