//the main method for this script, used to go through all vertices (spheres) in the environment and update their positions private void getVertexStats() { //get all vertices (spheres) allVertices = GameObject.FindGameObjectsWithTag("Vertex"); foreach (GameObject vertex in allVertices) { //get each vertexManager attached to current vertex (sphere) vertexManager = vertex.GetComponent <VertexManager>(); //Set the vector variables according to the vertice (sphere) position. To do maths on later. xVector.Set(vertex.transform.position.x, 0f, 0f); yVector.Set(0f, vertex.transform.position.y, 0f); zVector.Set(0f, 0f, vertex.transform.position.z); //calculate the distance between the vertices (sphere) x, y, and z cords from the center. xDist = Vector3.Distance(gameObject.transform.position, xVector); yDist = Vector3.Distance(gameObject.transform.position, yVector); zDist = Vector3.Distance(gameObject.transform.position, zVector); if (vertexManager != null && vertexManager.getVertexID() != 0 && vertexManager.getVertexID() != vertexManager.getParentsLineManager().getNumberOfVertices() - 1) { //setting vertex volume by passing x^2 + z^2 to convert volume vertexManager.setVertexVolume(convertVolume((xDist * xDist) + (zDist * zDist))); //setting vertex timing by passing y distance. vertexManager.setVertexTiming(convertTiming(vertex.transform.position.y)); //calling calculateAngle with the vertices (sphere) x and z cordinates, and then setting the vertices note accordingly. float vertexAngle = calculateAngle(vertexManager.transform.position.x, vertexManager.transform.position.z); vertexManager.setVertexAngle(vertexAngle); vertexManager.setVertexNote(convertAngle(vertexAngle)); } } }