Я пытаюсь создать список для каждого игрового объекта в сцене, который хранит позиции и повороты объекта в течение определенного промежутка времени. Я хочу, чтобы это произошло во время выполнения. Потому что, если я создаю новый объект во время выполнения, должен быть и новый отдельный список для этого объекта. Цель состоит в том, чтобы использовать значения для сброса положения и поворота во времени. Как перематывать время. Проблема в том, что я понятия не имею, как объявить и инициализировать список во время выполнения. Я пытался сохранить все значения в одном списке, но это не дает ожидаемого результата.
Буду признателен за подсказки и подсказки любого типа. Спасибо.
Какой-то код, чтобы поделиться моими попытками со всеми значениями в одном списке:
Сопрограмма для записи всех позиций и поворотов в одном списке
IEnumerator Record()
{
for (; ; )
{
Debug.Log("Recording");
/*Limit the maximum of values stored; that limits the seconds we can go back in time*/
if (pointsInTime.Count > Mathf.Round(rewindableObjects.Count*(1f/(Time.fixedDeltaTime/Time.timeScale)) * maxRewindTime))
{
for (int i = 1; i < rewindableObjects.Count; i++)
{
pointsInTime.RemoveLast();
}
}
foreach (GameObject go in rewindableObjects)
{
pointsInTime.AddFirst(new PointInTime(go.name, go.transform.position, go.transform.rotation, go.GetComponent<Rigidbody>().velocity));
}
yield return new WaitForSecondsRealtime(0.02f/Time.timeScale);
}
Функция перемотки для сброса всех позиций и поворотов с течением времени
/*rewind*/
void Rewind()
{
foreach(GameObject go in rewindableObjects)
{
if(pointsInTime.Count > 0)
{
PointInTime pointInTime = pointsInTime.First.Value;
if (pointInTime.goName == go.name) //this is way to slow. Solves the problem with objects swapping positions, but looks like a diashow. Needed: Way to differantiate all values belonging to one object in a seperate list or sth.
{
go.transform.position = pointInTime.position;
go.transform.rotation = pointInTime.rotation;
go.GetComponent<Rigidbody>().velocity = pointInTime.velocity; //not working because velocity is applyied, while the rigidbody is still kinematic!!!
pointsInTime.RemoveFirst();
}
}else StopRewind();
}
}