我有一个 LineRenderer
,其中包含许多位置,我正在尝试从点a -> b,b ->c等位置对该线进行动画处理...
首先,我保存了线的所有位置,然后重置了 positionCount
,这样在开始时它就不可见。但是当我在循环中绘制 lineRenderer
,每次迭代增加 positionCount
,并且在绘制下一条线时,之前的线会微微晃动并瞬间改变宽度。
以下是代码:
public float LineDrawSpeed;
void Start()
{
lineRenderer = GetComponent<LineRenderer>();
int lineCountInLineRenderer = lineRenderer.positionCount - 1;
var startPositions = new Vector3[lineRenderer.positionCount];
lineRenderer.GetPositions(startPositions);
lineRenderer.positionCount = 1;
StartCoroutine(LineDrawCoroutine(startPositions));
}
这里是协程:
IEnumerator LineDrawCoroutine(Vector3[] positions)
{
for (int i = 0; i < positions.Length - 1; i++)
{
if (lineRenderer.positionCount <= i + 1)
lineRenderer.positionCount++;
lineRenderer.SetPosition(i, positions[i]);
float timePass = 0f;
while (timePass < LineDrawSpeed)
{
var factor = timePass / LineDrawSpeed;
factor = Mathf.SmoothStep(0, 1, factor);
lineRenderer.SetPosition(i + 1, Vector3.Lerp(positions[i], positions[i + 1], factor));
timePass += Mathf.Min(Time.deltaTime, LineDrawSpeed - timePass);
yield return null;
}
}
}
机制运作良好,但动画方面出现了一些问题。