public void MoveVertex(int index, Vector3 position, Quaternion startRotation, Quaternion rotation) { position = RotateAround(startRotation, rotation, position, center); GameObject vertexInstance = vertexInstances[index]; VertexController vertexController = vertexInstance.GetComponent <VertexController>(); vertexController.UpdateLocalPositionFromWorldPosition(position); }
public void MoveVertices(int numberOfSides, Vector3 controllerPosition, Vector3 controllerUp) { Quaternion startRotation = Quaternion.identity; Quaternion rotation = Quaternion.LookRotation(controllerPosition - center, controllerUp); float radius = Vector3.Distance(center, controllerPosition); // distance between center and controller float _2pi = Mathf.PI * 2f; int numberVertices = numberOfSides; int count = 0; float radianOffset = (90.0f * Mathf.Deg2Rad); /* NOTE: I don't understand why this 90 degree offset is necessary, but it is. */ while (count < numberVertices) { float rad = ((float)count / numberVertices * _2pi) + radianOffset; Vector3 position = new Vector3(Mathf.Cos(rad) * radius, 0f, Mathf.Sin(rad) * radius) + center; position = RotateAround(startRotation, rotation, position, center); GameObject vertexInstance = vertexInstances[count]; VertexController vertexController = vertexInstance.GetComponent <VertexController>(); vertexController.UpdateLocalPositionFromWorldPosition(position); count++; } }