I am very new to game dev and I’m struggling to get my scripts to do what I want. It seems I’m missing a critical piece of information or failing to understand how something works here. I am trying to understand meshes and the direct manipulation of vertices. Right now, I have a cylinder vertically aligned along the y-axis. What I am trying to do is get all of the vertices of one of the cylinder’s circular face and manipulate them so they grow and shrink periodically. Currently, my code looks like this:
void Update()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
for (var i = 0; i < vertices.Length; i++)
{
var updateThis = (Mathf.Sin(Time.time + 1f));
if (vertices[i][1] > 0)
{
vertices[i] = new Vector3(vertices[i][0] * Mathf.Sin(Time.time + 1f), vertices[i][1], vertices[i][2] * Mathf.Sin(Time.time + 1f));
}
else
{
}
}
mesh.vertices = vertices;
}
However, when I run this, the sine function is exhibiting some strange behavior. The script does get all of the vertices of the “top” face, and shrink them towards the face’s center, but it will not grow them back to their original position. The vertices all seem, for lack of a better term, to get stuck at the center of the face. Why won’t they “grow” back to their original position and how can I fix this?