gpt4 book ai didi

c# - 具有多个位置的动画绘图 LineRenderer

转载 作者:行者123 更新时间:2023-12-05 03:52:19 26 4
gpt4 key购买 nike

我有一个具有多个位置的 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;
}
}
}

机制运作良好,但动画有些问题。

最佳答案

我发现这个宽度变化主题非常有趣。据我检查,有两点需要考虑。

1.- LineRenderer 渲染广告牌线条。

https://docs.huihoo.com/unity/5.3/Documentation/en/Manual/class-LineRenderer.html

广告牌是镶嵌在 3D 世界中的 2D 元素,其方向是自动计算的,因此它始终面向相机。这解释了宽度随相机移动而变化的原因。

2.- 如果相机没有移动,请考虑:如文档中所定义,宽度属性定义:“一个宽度值和一个曲线值,用于控制路径沿其长度的宽度。曲线在每个顶点处进行采样,因此其精度受轨迹中顶点数量的限制。轨迹的整体宽度由宽度值控制。”

https://docs.unity3d.com/Manual/class-LineRenderer.html

因此,当您动态改变直线的顶点时,轨迹的总宽度可能会发生变化。

所以我认为您的算法工作正常,并且宽度变化随线条渲染器组件一起出现。

关于c# - 具有多个位置的动画绘图 LineRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62276508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com