У меня большой набор данных, который содержит данные о местоположении транспортного средства с интервалом 0,1 секунды, и я пытался взять эти данные и плавно анимировать игровой объект вдоль этих позиций.
Я попытался использовать AnimationCurves и добавить ключевые кадры для отдельной оси, аналогичные этой
public AnimationCurve ac;
public AnimationCurve ac1;
public Vector3 pos1 = new Vector3(0.0f, 0.0f, 0.0f);
public Vector3 pos2 = new Vector3(0.0f, 0.0f, 0.0f);
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Move(pos1, pos2, ac, ac1, 3.0f));
}
}
IEnumerator Move(Vector3 pos1, Vector3 pos2, AnimationCurve ac, AnimationCurve ac1, float time)
{
float timer = 0.0f;
while (timer <= time)
{
var x = Mathf.Lerp(pos1.x, pos2.x, ac.Evaluate(timer / time));
var y = Mathf.Lerp(pos1.y, pos2.y, ac1.Evaluate(timer / time));
transform.position = new Vector3(x, y, 0);
timer += Time.deltaTime;
yield return null;
}
}
Однако я не мог понять, как преобразовать позиционные данные с долей секунды в правильные значения для AnimationClip.
Я также попытался использовать цикл по позициям с сопрограммами, подобными этому:
var coords = vehicles[0].middleCoords;
var previousStep = coords[0];
foreach(Vector3 step in coords)
{
MoveOverSeconds(step, 0.1f);
}
public IEnumerator MoveOverSeconds(Vector3 end, float seconds)
{
yield return new WaitForSeconds(seconds);
float elapsedTime = 0;
Vector3 startingPos = transform.position;
while (elapsedTime < seconds)
{
transform.position = Vector3.Lerp(startingPos, end, (elapsedTime / seconds));
elapsedTime += Time.deltaTime;
yield return new WaitForEndOfFrame();
}
transform.position = end;
Однако, поскольку for l oop работает независимо от времени, он запускает подпрограмму раньше других один заканчивается. Любая помощь в решении этой проблемы будет принята с благодарностью.