У меня есть код, который переносит позиции экземпляра Sphere из вершин 1-й сетки в вершины 2-й сетки.
Экземпляры сферы перемещаются с помощью Lerp, который использует трансформации данных.Проблема в том, что, очевидно, перемещение экземпляров таким способом не очень хорошо работает с физикой Unity, поэтому другие объекты, которые сталкиваются с экземплярами сферы, не сталкиваются с ними должным образом.
Как я могу изменить код, чтобы правильно заставить экземпляры Sphere двигаться со скоростью, возможно, Vector3 (или что-то еще, что заставило бы физику Unity работать правильно), а не просто перемещаться с помощью установки явных позиций преобразования?
вот код.У меня есть эти переменные:
public List<TransformData> meshVertices1 = new List<TransformData>();
public List<TransformData> meshVertices2 = new List<TransformData>();
, которые затем заполняются такими данными, как:
meshVertices1.Add(new TransformData(position, rotation, scaleVector));
meshVertices2.Add(new TransformData(position, rotation, scaleVector));
, затем я создаю экземпляры сфер на основе данных выше:
spheres = new GameObject[24];
for (int i = 0; i < mesh.vertexCount; i++)
{
spheres[i] = Instantiate(spherePrefab, meshVertices1[i].position, Quaternion.identity, transform);
}
и, наконец, добавьте Lerp для позиций экземпляра сферы в методе Update:
for (int i = 0; i < 24; i++)
{
spheres[i].transform.localPosition = Vector3.Lerp(meshVertices1[i].position, meshVertices2[i].position, t);
}
Спасибо.Одной из вещей, которые я пробовал, было изменение метода обновления, чтобы он говорил:
Vector3 convert = spheres[i].transform.InverseTransformPoint(transform.localPosition);
convert = Vector3.Lerp(meshVertices1[i], meshVertices2[i].position, t);
, но при попадании в игру все сферы просто падали на пол и переворачивались.Принимая во внимание, что я хочу, чтобы экземпляры двигались и оставались в формировании вершин 2-й сетки.