如何解决Unity 3d 在使用 LineRendrer 时清除其他 LineRendrer
你好,我是 Unity 3d 的新手。
所以我想要的是绘制一个 LineRendrer,但是当我绘制它时,我想清除另一个 LineRendrer。
查看 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(){
}
}
解决方法
我认为有两种选择,具体取决于您的线渲染器是如何创建的,这在问题中没有提到。
1.- 如果您的每个线条渲染器都是备用游戏对象的组件,则您需要持有对更高阶类中的那些的引用,以消除/破坏您感兴趣的线条渲染器。例如 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。
,要清除 LineRenderer,您只需将 positionCount 设置为 0:
LineRenderer.positionCount = 0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。