Unity 3d 在使用一个时清除其他 LineRender

Unity 3d clear other LineRendrer's when using one

你好,我是 unity 3d 新手。

所以我想要绘制一个 LineRendrer,但是当我绘制它时,我想清除另一个 LineRenderer。

查看演示的 2 张图片:

这是我用来画线的代码,我想清除其他线。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LineAnimatoor : MonoBehaviour{
    [SerializeField] private float animationDuration = 5f;
    private LineRenderer lineRenderer;
    private Vector3[] linePoints;
    private int pointsCount;


    // Start is called before the first frame update
    void Start(){
        lineRenderer = GetComponent<LineRenderer> ();

        // store the points
        pointsCount = lineRenderer.positionCount;
        linePoints = new Vector3[pointsCount];
        for (int i = 0; i < pointsCount; i++){
            linePoints[i] = lineRenderer.GetPosition(i);
        }

        StartCoroutine (AnimateLine());

    }

    private IEnumerator AnimateLine(){

        for (int i = 0; i < pointsCount-1; i++){

            float startTime = Time.time;
            Vector3 startPosition = linePoints[i];
            Vector3 endtPosition = linePoints[i+1];
            Vector3 pos = startPosition;

            while(pos !=endtPosition){

                float t = (Time.time - startTime)/ animationDuration;
                pos = Vector3.Lerp(startPosition, endtPosition, t);

                for (int j = i+1; j < pointsCount; j++){
                    lineRenderer.SetPosition(j, pos);
                }
                yield return null;
                
            }
        }
    }

    // Update is called once per frame
    void Update(){
        
    }
}

要清除 LineRenderer,您只需将 positionCount 设置为 0:

LineRenderer.positionCount = 0;

我认为有两种选择,具体取决于您创建线渲染器的方式,这在问题中未提及。

1.- 如果您的每个线渲染器都是备用游戏对象的组件,则您需要持有对更高阶 class 到 eliminate/destroy 您感兴趣的线渲染器的引用.例如,List<LineRenderer>class LineRendererManager 中,您可以在其中处理线路的生命周期。

2.- 另一个机会是只有一个线渲染器,这样当你重置它的点时,前一个会随着点的重新设置而消失。 这将涉及调用线渲染器的线初始化来存储点,更具体地说:

// store the points
pointsCount = lineRenderer.positionCount;
linePoints = new Vector3[pointsCount];
for (int i = 0; i < pointsCount; i++){
    linePoints[i] = lineRenderer.GetPosition(i);
}

来自代码中的其他地方而不是 Start。它将从按钮单击事件或任何触发第二行生成的事件而不是从 Start 调用。这样你就可以让你的 lineRenderer 处于活动状态,能够在需要时设置 ne 线的点。

要获得更详细的答案,您需要指定该行的生成方式,但如果您只想要一个活动行并且需要在创建时删除前一个行,您的选择是选项 2。