用LineRenderer组件逐步显示一条线

本文介绍了如何在Unity游戏中使用LineRenderer组件逐步显示圆的轨迹,包括设置点的数量、具体点的位置以及使用动画逐点更新。作者提供了详细的代码示例,展示了如何处理线的Vector3数组并实现逐点显示效果。
摘要由CSDN通过智能技术生成

一、需求及效果

显示运动轨迹的时候,要把轨迹逐步显示出来。
比如:这个圆是一个轨迹,要让它逐步显示
请添加图片描述

备注:圆的轨迹点已知【下图为提前预设好的点】
在这里插入图片描述

二、设置点的注意事项

  • 步骤1:设置点的数量:线条包含多少个点
myLineRenderer.positionCount = 2;
  • 步骤2:设置具体的点:用一个Vector3数组进行设置
var ary = new Vector3[2]{Vector3.one,Vector3.up};//仅作举例之用
myLineRenderer.SetPositions(ary);

三、逐点显示线条

组成圆的所有点:

/// <summary>
/// 构成线条的点
/// </summary>
private List<Vector3> points = new List<Vector3>();
//"动画"逐点显示线条
for (int i = 0; i < points.Count; i++)
{
    myLineRenderer.positionCount = i + 1;                      //设置点的数量***必须设置***
    var ary = new Vector3[2]{Vector3.one,Vector3.up};
    myLineRenderer.SetPositions(points.Take(i+1).ToArray());   //设置构成的点
    await UniTask.Delay(20);                                   //20毫秒间隔现实下一个点
}

四、附录代码

using System;
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;//第三方包
using UnityEngine;

/// <summary>
/// 把一条线按点逐步显示
/// </summary>
public class DisplayLine : MonoBehaviour
{
    /// <summary>
    /// 要处理的线条
    /// </summary>
    public LineRenderer myLineRenderer;

    /// <summary>
    /// 构成线条的点
    /// </summary>
    private List<Vector3> points = new List<Vector3>();
  
    // Start is called before the first frame update
    void Start()
    {
        //获取line的Vector3数组
        int count = myLineRenderer.positionCount;
        Vector3[] vec3Ary = new Vector3[count];
        myLineRenderer.GetPositions(vec3Ary);
        points.Clear();
        points.AddRange(vec3Ary.ToList());
        
        //清空线条
        myLineRenderer.positionCount = 0;
    }
    
#if UNITY_EDITOR
    [ContextMenu("测试显示线条")]
#endif
    void test()
    {
        Func<UniTask> fn = async () =>
        {
            //动画逐点显示线条
            for (int i = 0; i < points.Count; i++)
            {
                myLineRenderer.positionCount = i + 1;                      //设置点的数量***必须设置***
                var ary = new Vector3[2]{Vector3.one,Vector3.up};
                myLineRenderer.SetPositions(points.Take(i+1).ToArray());   //设置构成的点
                await UniTask.Delay(20);                     //20毫秒间隔现实下一个点
            }
        };

        fn().Forget();
    }
}
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值